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

其实网上已经有好多这样的教程了,但作为新手的我们,实在似懂非懂的。我们都屡屡碰壁,有时候加个群吧,几乎大部分人都是新手,会的人缺不愿意教你,有时候真的很无助,甚至人家误解你就是伸手党,在搭建这套分布式教程,我尝试过google很多次,有问题就是找憋,可是找出来的结果,却不像我想象的那样。我在其中发现到很多问题,在apache这种开源程序搭建的时候,最大的问题,就是版本问题,版本和版本之间,搭配不好,那么会让你很折腾,为了记录下我这个过程。我只是想分享我的经验。

一,前置准备

Spark1.6.0

Hadoop2.6.5

Scala2.10.5

Hbase1.2.4

本教程是基于Ubuntu14.04/32位版搭建的。相应系统请自己到网上上下载。机子预留的内存必须很大

二,搭建工作

本教程大部分资料参考 子雨大数据之Spark入门教程 中的读取Hbase和Spark分布式搭建篇章,有兴趣的朋友可以看看这篇文章,快速学习入门级Spark。

我在这只演示一台机子,配置好机子后只要一条命令就可以配置其他的服务器,所以不用担心。

1.创建Hadoop用户

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

2.更改hostname

先找到自己的ip这里显示的是内网ip公网ip就自己在服务器上查吧自己更换。

ifconfig

3.注册hosts,更改hostsname

sudo su
vim /etc/hosts

这一步记得把内容全部清空

vim /etc/hostname

重启服务器(让配置重置)

三,安装并生成ssh

sudo su
sudo apt-get install openssh-server


这里我是已经安装过了的。
生成密钥这一步非常重要,是为了让服务器可以通过密钥来互相通信,不用输入密码,机子和机子间正常访问,否则怎么叫分布式哦。

su hadoop
cd ~
ssh-keygen -t rsa  

无脑回车就行了
然后把公钥贴出去验证墙。

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

创建对应文件夹,并开放权限

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

Ok了到这里基本上该配置的都配好了。现在我们用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

好了至此我们就基本把要用的文件全部弄上了。因为我自己在本机已经做过一次,所以我基本上大部分大段粘贴,就不一步步贴了,而且你都会看的懂,我希望你不是机器人,有些东西还是得自己去更改下。

六,配置环境

sudo su
vim /etc/profile

如果你是跟着教程来的话,直接在文档后面追加这些语句就行了,否则请自行去修改对应的路径。相信自己还是有能力修改的。。

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

这个是分布式的关键,它主要是拿来分配DataNode在哪些机子上,如果要分到机子上,那么这个必须设置,等下我教怎么配置,先把一台机子打通。复制到其他机子一样能行。

vim slaves
#清空里面所有内容添加下面语句
master

(7)执行hadoop

先初始化hadoop的namenode。

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

这样就代表成功建立了。


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

当出现这几个的时候,你就偷偷的笑吧。

(8)测试hadoop

输入当前命令

#./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/\*

当出现


基本运行正常。有可能yarn会出问题,这些问题可能和链接库有关,然后自己上百度处理吧,这和系统什么的本身都有关系,折腾地方就是这些。

八,配置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
#清除里面内容
master

(4) 执行hbase

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

如果这3个进程出现了那就代表没太大问题了。


(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去掉,输入下面内容
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)执行spark

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

只要出现这两个,你就可以去喝口水了哦。很完美。


(5)测试spark

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

如果你可以出现下面的输出,恭喜你,从一路过来,你已经完成hbase->hadoop,spark->hadoop的连接,就差最后一步了spark->hbase

九,测试spark-hbase

开始前要导入一定量的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

然后重启并打开所有进程

bin/spark-shell # 在sparkshell输入以下内容
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 中出现这个2字,好了恭喜本章搭建已经完美完成了。意味着spark连通hbase了。你可以用java来读取等等了。


十,完全分布式搭建

刚刚说了,搭建完全分布式很简单,那么怎么简单法?愿意的看下去
假设我现在有这几个节点

master 192.168.144.143
slave1 192.168.144.144
slave2 192.168.144.145

必须将上面主机host都添加到每个节点的/etc/hosts中

那么同样的先做ssh免登陆,然后将各自的authorized_keys的内容贴到每个节点账号上的authorized_keys中,必须保持每个主机都有集群的公钥

然后修改主机master内容

vim  /data/install/apache/hadoop/etc/hadoop/slaves
#修改成以下内容
master
slave1
slave2
vim /data/install/apache/hbase/conf/regionservers
#修改成以下内容
slave1
slave2
vim /data/install/apache/spark/conf/slaves
#修改成以下内容
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下的内容贴过去slave1,slave2就可以了

如果最后集群搭建还是弄不清楚,那么你还是可以参考林子雨教授教程下的集群搭建。相信你会明白我这里的意思了

我不保证一定能撘成功,但在我这机子上重新撘一遍还是成功的,搭建这个真的很辛苦,我个人感觉自己就是盲人摸象,不断被版本问题和库问题折腾,不断找不到好的解决方法,我也是新手,我理解这个过程,虽然我写的这篇文章,有点傻瓜式。但是只是提供一点帮助,如果大家出现什么bug与解决办法,最后可以在评论区里写下,这样更有助于大家不盲目找答案。谢谢

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,165评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,720评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,849评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,245评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,596评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,747评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,977评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,708评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,448评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,657评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,141评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,493评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,153评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,890评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,799评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,685评论 2 272

推荐阅读更多精彩内容