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

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

一,前置准备

Spark1.6.0

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

Hadoop2.6.5

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

Scala2.10.5

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

Hbase1.2.4

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

本教程是基于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

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

2.更改hostname

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

ifconfig

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

3.注册hosts,更改hostsname

sudo su
vim /etc/hosts

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

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

vim /etc/hostname

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

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

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

三,安装并生成ssh

sudo su
sudo apt-get install openssh-server

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

这里我是已经安装过了的。

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

su hadoop
cd ~
ssh-keygen -t rsa  

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

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

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

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

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

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

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

Ok了到这里基本上该配置的都配好了。现在我们用xftp上传我们的下载的.tgz包吧。

四,上传文件

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

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

五,解压所有文件

回到我们的命令行窗口

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

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

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

六,配置环境

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

这样就代表成功建立了。

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

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

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

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

(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/\*

当出现

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

基本运行正常。有可能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个进程出现了那就代表没太大问题了。

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

(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'

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

欢喜吧,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

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

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

(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+Hadoop+Scala模拟完全分布搭建教程》

九,测试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

然后重启并打开所有进程

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

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来读取等等了。

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

十,完全分布式搭建

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

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与解决办法,最后可以在评论区里写下,这样更有助于大家不盲目找答案。谢谢

    原文作者:Gavinjou大笨象
    原文地址: https://www.jianshu.com/p/87b917d10ef9
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞