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