Spark+Hbase+Hadoop+Scala模擬完全分布搭建教程

其實網(wǎng)上已經(jīng)有好多這樣的教程了讶隐,但作為新手的我們,實在似懂非懂的久又。我們都屢屢碰壁巫延,有時候加個群吧,幾乎大部分人都是新手地消,會的人缺不愿意教你炉峰,有時候真的很無助,甚至人家誤解你就是伸手黨脉执,在搭建這套分布式教程疼阔,我嘗試過google很多次,有問題就是找憋半夷,可是找出來的結(jié)果婆廊,卻不像我想象的那樣。我在其中發(fā)現(xiàn)到很多問題巫橄,在apache這種開源程序搭建的時候淘邻,最大的問題,就是版本問題湘换,版本和版本之間宾舅,搭配不好,那么會讓你很折騰彩倚,為了記錄下我這個過程筹我。我只是想分享我的經(jīng)驗。

一帆离,前置準(zhǔn)備

Spark1.6.0

Hadoop2.6.5

Scala2.10.5

Hbase1.2.4

本教程是基于Ubuntu14.04/32位版搭建的蔬蕊。相應(yīng)系統(tǒng)請自己到網(wǎng)上上下載。機子預(yù)留的內(nèi)存必須很大盯质。

二袁串,搭建工作

本教程大部分資料參考 子雨大數(shù)據(jù)之Spark入門教程 中的讀取Hbase和Spark分布式搭建篇章概而,有興趣的朋友可以看看這篇文章呼巷,快速學(xué)習(xí)入門級Spark。

我在這只演示一臺機子赎瑰,配置好機子后只要一條命令就可以配置其他的服務(wù)器王悍,所以不用擔(dān)心。

1.創(chuàng)建Hadoop用戶

sudo su
sudo useradd -m hadoop -s /bin/bash
sudo passwd hadoop
sudo adduser hadoop sudo
su hadoop

2.更改hostname

先找到自己的ip這里顯示的是內(nèi)網(wǎng)ip餐曼,公網(wǎng)ip就自己在服務(wù)器上查吧自己更換压储。

ifconfig

3.注冊hosts,更改hostsname

sudo su
vim /etc/hosts

這一步記得把內(nèi)容全部清空

vim /etc/hostname

重啟服務(wù)器(讓配置重置)

三鲜漩,安裝并生成ssh

sudo su
sudo apt-get install openssh-server


這里我是已經(jīng)安裝過了的。
生成密鑰這一步非常重要集惋,是為了讓服務(wù)器可以通過密鑰來互相通信孕似,不用輸入密碼,機子和機子間正常訪問刮刑,否則怎么叫分布式哦喉祭。

su hadoop
cd ~
ssh-keygen -t rsa  

無腦回車就行了
然后把公鑰貼出去驗證墻。

cd .ssh
cat ./id_rsa.pub >> ./authorized_keys

創(chuàng)建對應(yīng)文件夾雷绢,并開放權(quán)限

sudo su
mkdir -p /data/install/apache
mkdir -p /data/install/java
chmod -R 777 /data
su hadoop

Ok了到這里基本上該配置的都配好了》豪樱現(xiàn)在我們用xftp上傳我們的下載的.tgz包吧。

四翘紊,上傳文件

把jdk1.7以上放在/data/install/java/下,
把scala,hadoop,hbase,spark放在/data/install/apache/下蔽氨。

五,解壓所有文件

回到我們的命令行窗口

cd /data/install/apache/

tar -zxvf hadoop-2.6.5.tar.gz
tar -zxvf hbase-1.2.4-bin.tar.gz
tar -zxvf scala-2.10.5.tgz 
tar -zxvf spark-1.6.0-bin-hadoop2.6.tgz

rm -rf hadoop-2.6.5.tar.gz
rm -rf hbase-1.2.4-bin.tar.gz
rm -rf spark-1.6.0-bin-hadoop2.6.tgz
rm -rf scala-2.10.5.tgz 

mv hadoop-2.6.5 hadoop
mv hbase-1.2.4 hbase
mv scala-2.10.5 scala
mv spark-1.6.0-bin-hadoop2.6 spark

cd ../java/
tar -zxvf jdk-7u55-linux-i586.tar.gz
rm -rf jdk-7u55-linux-i586.tar.gz

好了至此我們就基本把要用的文件全部弄上了帆疟。因為我自己在本機已經(jīng)做過一次鹉究,所以我基本上大部分大段粘貼,就不一步步貼了踪宠,而且你都會看的懂坊饶,我希望你不是機器人,有些東西還是得自己去更改下殴蓬。

六匿级,配置環(huán)境

sudo su
vim /etc/profile

如果你是跟著教程來的話,直接在文檔后面追加這些語句就行了染厅,否則請自行去修改對應(yīng)的路徑痘绎。相信自己還是有能力修改的。肖粮。

export JAVA_HOME=/data/install/java/jdk1.7.0_55
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export HADOOP_HOME=/data/install/apache/hadoop
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/lib
export HADOOP_COMMON_LIB_NATIVE_DIR=/data/install/apache/hadoop/lib/native
export SCALA_HOME=/data/install/apache/scala
export PATH=$PATH:$SCALA_HOME/bin
export SPARK_HOME=/data/install/apache/spark
export PATH=$SPARK_HOME/bin:$PATH
export PATH=/data/install/sbt/:$PATH
export PATH=$PATH:/data/install/apache/hbase/bin

生效配置

source /etc/profile

七孤页,配置hadoop

hadoop是根基,配置不成功的話一切都是空談涩馆。

cd /data/install/apache/hadoop/etc/hadoop

(1)hadoop-env.sh

vim hadoop-env.sh
export JAVA_HOME=/data/install/java/jdk1.7.0_55  #修改JAVA_HOME

(2)core-site.xml

vim core-site.xml
#修改configuration
<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://master:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/data/install/apache/hadoop/tmp</value>
                <description>Abase for other temporary directories.</description>
        </property>

        <property>
                 <name>dfs.webhdfs.enabled</name>
                 <value>true</value>
         </property>

</configuration>

(3)mapred-site.xml

mv mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
#修改configuration
<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>master:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>master:19888</value>
        </property>
</configuration>

(4)hdfs-site.xml

vim hdfs-site.xml
#修改configuration
<configuration>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>master:50090</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/data/install/apache/hadoop/tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/data/install/apache/hadoop/tmp/dfs/data</value>
        </property>
</configuration>

(5)yarn-site.xml

vim yarn-site.xml
#修改configuration
<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>master</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>

(6)slaves

這個是分布式的關(guān)鍵行施,它主要是拿來分配DataNode在哪些機子上,如果要分到機子上魂那,那么這個必須設(shè)置蛾号,等下我教怎么配置,先把一臺機子打通涯雅。復(fù)制到其他機子一樣能行鲜结。

vim slaves
#清空里面所有內(nèi)容添加下面語句
master

(7)執(zhí)行hadoop

先初始化hadoop的namenode。

su hadoop
cd /data/install/apache/hadoop
bin/hadoop namenode -format

這樣就代表成功建立了。


sbin/start-all.sh
source /etc/profile
jps

當(dāng)出現(xiàn)這幾個的時候精刷,你就偷偷的笑吧拗胜。

(8)測試hadoop

輸入當(dāng)前命令

#./bin/hadoop dfsadmin -safemode leave  
./bin/hadoop dfsadmin -report 
./bin/hdfs dfs -mkdir /input
./bin/hdfs dfs -put ./etc/hadoop/\*.xml /input
./bin/hdfs dfs -ls /input
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep /input /output 'dfs[a-z.]+'
./bin/hdfs dfs -cat /output/\*

當(dāng)出現(xiàn)


基本運行正常。有可能yarn會出問題怒允,這些問題可能和鏈接庫有關(guān)埂软,然后自己上百度處理吧,這和系統(tǒng)什么的本身都有關(guān)系纫事,折騰地方就是這些仰美。

八,配置hbase

(1)hbase-env.sh

cd /data/install/apache/hbase/conf
vim hbase-env.sh
#修改hbase-env.sh
export JAVA_HOME=/data/install/java/jdk1.7.0_55
expoirt HBASE_MANAGES_ZK=true #打開

(2) hbase-site.xml

vim  hbase-site.xml
#修改configuration
<configuration>

    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://master:9000/hbase</value>
    </property>

    <property>
        <name>hbase.zoopkeeper.property.dataDir</name>
        <value>/data/install/apache/hbase/software/zookeeper</value>
    </property>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>master</value>
    </property>

    <property>
         <name>hbase.master</name>
         <value>master</value>
    </property>

</configuration>

(3) regionservers

vim regionservers
#清除里面內(nèi)容
master

(4) 執(zhí)行hbase

cd /data/install/apache/hbase
bin/start-hbase.sh
source /etc/profile
jps

如果這3個進(jìn)程出現(xiàn)了那就代表沒太大問題了儿礼。


(5) 測試hbase

bin/hbase shell
#在hbase shell里面輸入以下命令
list
create 'student','info'
describe 'student'
put 'student','1','info:name','Xueqian'
put 'student','1','info:gender','F'
put 'student','1','info:age','23'
put 'student','2','info:name','Weiliang'
 put 'student','2','info:gender','M'
put 'student','2','info:age','24'
scan 'student'

歡喜吧咖杂,hbase也搞掂了。就剩下spark了蚊夫,再堅持一下吧诉字。

八,配置spark

(1)spark-env.sh

cd /data/install/apache/spark/conf
mv spark-env.sh.template spark-env.sh
vim spark-env.sh
#在最后添加以下配置
export SCALA_HOME=/data/install/apache/scala
export JAVA_HOME=/data/install/java/jdk1.7.0_55
export SPARK_MASTER_IP=master
export SPARK_WORKER_MEMORY=1g
export HADOOP_CONF_DIR=/data/install/apache/hadoop/etc/hadoop
export SPARK_DIST_CLASSPATH=$(/data/install/apache/hadoop/bin/hadoop classpath)
export SPARK_CLASSPATH=$SPARK_CLASSPATH:/data/install/apache/spark/lib/hbase/*:/data/install/apache/hbase/conf

(2)slaves

mv slaves.template slaves
vim slaves
#同樣把localhost去掉知纷,輸入下面內(nèi)容
master

(3)spark-defaults.conf

mv spark-defaults.conf.template spark-defaults.conf
vim spark-defaults.conf
#把以下兩個打開
spark.master                     spark://master:7077
spark.serializer                 org.apache.spark.serializer.KryoSerializer

(4)執(zhí)行spark

cd /data/install/apache/spark
sbin/start-all.sh

只要出現(xiàn)這兩個壤圃,你就可以去喝口水了哦。很完美琅轧。


(5)測試spark

 bin/spark-shell 
#在spark-shell下輸入下面命令驗證
val test=sc.parallelize(List("1","2","3"))
test.collect().foreach(println)

如果你可以出現(xiàn)下面的輸出伍绳,恭喜你,從一路過來乍桂,你已經(jīng)完成hbase->hadoop,spark->hadoop的連接冲杀,就差最后一步了spark->hbase

九,測試spark-hbase

開始前要導(dǎo)入一定量的hbase包

cd /data/install/apache/spark/lib
mkdir hbase
cd hbase
cp /data/install/apache/hbase/lib/hbase*.jar ./
cp /data/install/apache/hbase/lib/guava-12.0.1.jar ./
cp /data/install/apache/hbase/lib/htrace-core-3.1.0-incubating.jar ./
cp /data/install/apache/hbase/lib/protobuf-java-2.5.0.jar ./
cp /data/install/apache/hbase/lib/metrics-core-2.2.0.jar

然后重啟并打開所有進(jìn)程

bin/spark-shell # 在sparkshell輸入以下內(nèi)容
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.hbase.\_
import org.apache.hadoop.hbase.client.\_
import org.apache.hadoop.hbase.mapreduce.TableInputFormat
import org.apache.hadoop.hbase.util.Bytes
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext.\_
import org.apache.spark.SparkConf
val conf = HBaseConfiguration.create()
conf.set(TableInputFormat.INPUT_TABLE, "student")
val stuRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat],
  classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],
  classOf[org.apache.hadoop.hbase.client.Result])
  val count = stuRDD.count()

如果在sparkshell 中出現(xiàn)這個2字睹酌,好了恭喜本章搭建已經(jīng)完美完成了权谁。意味著spark連通hbase了。你可以用java來讀取等等了憋沿。


十旺芽,完全分布式搭建

剛剛說了,搭建完全分布式很簡單辐啄,那么怎么簡單法采章?愿意的看下去
假設(shè)我現(xiàn)在有這幾個節(jié)點

master 192.168.144.143
slave1 192.168.144.144
slave2 192.168.144.145

必須將上面主機host都添加到每個節(jié)點的/etc/hosts中

那么同樣的先做ssh免登陸,然后將各自的authorized_keys的內(nèi)容貼到每個節(jié)點賬號上的authorized_keys中壶辜,必須保持每個主機都有集群的公鑰悯舟。

然后修改主機master內(nèi)容

vim  /data/install/apache/hadoop/etc/hadoop/slaves
#修改成以下內(nèi)容
master
slave1
slave2
vim /data/install/apache/hbase/conf/regionservers
#修改成以下內(nèi)容
slave1
slave2
vim /data/install/apache/spark/conf/slaves
#修改成以下內(nèi)容
slave1
slave2

然后將所有軟件全部安裝全部傳去另外兩臺主機即可。

scp -r /data/install/apache/hadoop/ hadoop@slave1:/data/install/apache/hadoop/
scp -r /data/install/apache/hbase/ hadoop@slave1:/data/install/apache/hbase/
scp -r /data/install/apache/spark/ hadoop@slave1:/data/install/apache/spark/
scp -r /data/install/apache/scala/ hadoop@slave1:/data/install/apache/scala/

scp -r /data/install/apache/hadoop/ hadoop@slave2:/data/install/apache/hadoop/
scp -r /data/install/apache/hbase/ hadoop@slave2:/data/install/apache/hbase/
scp -r /data/install/apache/spark/ hadoop@slave2:/data/install/apache/spark/
scp -r /data/install/apache/scala/ hadoop@slave2:/data/install/apache/scala/

scp -r /data/install/java/ hadoop@slave1:/data/install/java/
scp -r /data/install/java/ hadoop@slave2:/data/install/java/

最后一步了士复,就是將主機master的/etc/profile下的內(nèi)容貼過去slave1图谷,slave2就可以了

如果最后集群搭建還是弄不清楚翩活,那么你還是可以參考林子雨教授教程下的集群搭建阱洪。相信你會明白我這里的意思了

我不保證一定能撘成功便贵,但在我這機子上重新?lián)乙槐檫€是成功的,搭建這個真的很辛苦冗荸,我個人感覺自己就是盲人摸象承璃,不斷被版本問題和庫問題折騰,不斷找不到好的解決方法蚌本,我也是新手盔粹,我理解這個過程,雖然我寫的這篇文章程癌,有點傻瓜式舷嗡。但是只是提供一點幫助,如果大家出現(xiàn)什么bug與解決辦法嵌莉,最后可以在評論區(qū)里寫下进萄,這樣更有助于大家不盲目找答案。謝謝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锐峭,一起剝皮案震驚了整個濱河市中鼠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沿癞,老刑警劉巖援雇,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異椎扬,居然都是意外死亡惫搏,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進(jìn)店門蚕涤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晶府,“玉大人,你說我怎么就攤上這事钻趋〈剑” “怎么了?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵蛮位,是天一觀的道長较沪。 經(jīng)常有香客問我,道長失仁,這世上最難降的妖魔是什么尸曼? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮萄焦,結(jié)果婚禮上控轿,老公的妹妹穿的比我還像新娘冤竹。我一直安慰自己,他們只是感情好茬射,可當(dāng)我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布鹦蠕。 她就那樣靜靜地躺著,像睡著了一般在抛。 火紅的嫁衣襯著肌膚如雪钟病。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天刚梭,我揣著相機與錄音肠阱,去河邊找鬼。 笑死朴读,一個胖子當(dāng)著我的面吹牛屹徘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播衅金,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼噪伊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了典挑?” 一聲冷哼從身側(cè)響起酥宴,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎您觉,沒想到半個月后拙寡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡琳水,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年肆糕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片在孝。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡诚啃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出私沮,到底是詐尸還是另有隱情始赎,我是刑警寧澤,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布仔燕,位于F島的核電站造垛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏晰搀。R本人自食惡果不足惜五辽,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望外恕。 院中可真熱鬧杆逗,春花似錦乡翅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至排龄,卻和暖如春波势,著一層夾襖步出監(jiān)牢的瞬間翎朱,已是汗流浹背橄维。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拴曲,地道東北人争舞。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像澈灼,于是被迫代替她去往敵國和親竞川。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內(nèi)容