所用信息版本:
主节点1台: ubuntu 16.04 desktop .
从节点2台: ubuntu 14.04 server
hadoop 2.7.4
spark 2.2.0
java 1.8
scala 2.12.3
(搭建过程 也是linux 命令熟悉过程)
先改下 三台主机名称: 主节点; server1 ,从节点slave1,slave2
一、修改hosts文件
在主节点,就是第一台主机的命令行下;
vim /etc/hosts
在原文件的基础上加上:
127.0.0.1 localhost 192.168.198.100 server1 192.168.198.201 slave1 192.168.198.202 slave2
注意,第一个千万不能去。否者ping不通自己。
二、ssh互信(免密码登录)
我配置的是用户是yzk1,家目录应该是/home/zyk1/
#在主节点执行下面的命令:
ssh-keygen -t rsa -P '' #一路回车直到生成公钥
scp ~/.ssh/id_rsa.pub yzk1@slave1:/home/yzk1/.ssh/id_rsa.pub.master #从master节点拷贝id_rsa.pub到slave主机上,并且改名为id_rsa.pub.master scp ~/.ssh/id_rsa.pub yzk1@slave2:/home/yzk1/.ssh/id_rsa.pub.master #同
scp /etc/hosts yzk1@slave1:/etc/hosts #统一hosts文件,让几个主机能通过host名字来识别彼此
scp /etc/hosts yzk1@slave2:/etc/hosts #统一hosts文件,让几个主机能通过host名字来识别彼此
#在对应的主机下执行如下命令: cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys #master主机 cat ~/.ssh/id_rsa.pub.master >> ~/.ssh/authorized_keys #slave主机
这样server1主机就可以无密码登录到其他主机,这样子在运行server1上的启动脚本时和使用scp命令时候,就可以不用输入密码了。
三、安装基础环境(JAVA和SCALA环境)
1安装JAVA 1.8
官网上下载 jdk包 看清对应版本。
在/usr下 :
makdir java
解压jdk放在/usr/java 下
#增加JAVA_HOME
vim etc/profile
#增加如下行: #Java home export JAVA_HOME=/usr/java/jdk1.8.0_144 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
#刷新配置:
source /etc/profile #当然reboot也是可以的
配置从主机的java环境
#使用scp命令进行拷贝,将安装包拷过去,然后tar zxvf 解压 scp 主节点压缩包 从节点位置
#其他的步骤如主节点配置一样
2安装 scala
类似安装java ,官方网站下载,并解压安装即可。再配置路径
export SCALA_HOME=/usr/scala/scala-2.12.3
export PATH=$PATH:${SCALA_HOME}/bin
四、Hadoop2.7.4完全分布式搭建
主节点:
1.去官方网站下载压缩包:https://dist.apache.org/repos/dist/release/hadoop/common/hadoop-2.7.4/
2.解压并移动至相应目录
我的习惯是将软件放置/usr目录下:
tar -xvf hadoop-2.7.3.tar.gz mv hadoop-2.7.3 /usr/hadoop
3.修改相应的配置文件:
(1)/etc/profile:
export HADOOP_HOME=/usr/hadoop/hadoop-2.7.4
export PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
(2)$HADOOP_HOME/etc/hadoop/hadoop-env.sh
修改JAVA_HOME 如下:
export JAVA_HOME=/usr/java/jdk1.8.0_144
(3)$HADOOP_HOME/etc/hadoop/slaves
slave1
slave2
(4)$HADOOP_HOME/etc/hadoop/core-site.xml(在$HADOOP_HOME下新建tmp文件夹)
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://server1:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop/hadoop-2.7.4/tmp</value>
</property>
</configuration>
5)$HADOOP_HOME/etc/hadoop/hdfs-site.xml (在$HADOOP_HOME下新建hdfs文件夹,在该文件下新建data、name文件夹))
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>server1:9001</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/hadoop/hadoop-2.7.4/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/hadoop/hadoop-2.7.4/hdfs/data</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
(6)$HADOOP_HOME/etc/hadoop/mapred-site.xml
复制template,生成xml:
cp mapred-site.xml.template mapred-site.xml
内容:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>server1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>server1:19888</value>
</property>
</configuration>
(7)$HADOOP_HOME/etc/hadoop/yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>server1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>server1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>server1:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>server1:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>server1:8088</value>
</property>
<property >
<name>yarn.nodemanager.resource.memory-mb</name> #很重要,否者运行时候可能卡住。2.7.3版本之后至少要1.5G
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>1</value>
</property>
</configuration>
再启动之前我们需要
格式化一下namenode
hadoop namenode -format
再从节点配置:
将配置好的hadoop scp -r到从节点,(注意最好和主节点目录完全一致(我都是放在/usr/hadoop/下),这样子不用修改配置文件) 然后配置/etc/profile ,最后各自source profile
测试HADOOP 安装成功:
启动 :
$HADOOP_HOME/sbin/start-all.sh
输入jps:
5780 ResourceManager
5413 NameNode
5624 SecondaryNameNode
8221 Jps
从节点:
nodemanager
datanode
jps
这样子基本正常
也可以通过web http://server1:50070 查看状态
测试样例:(其中wordcount.txt为本地文件)
hadoop fs -mkdir -p /Hadoop/Input hadoop fs -put wordcount.txt /Hadoop/Input hadoop jar ¥HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.4.jar wordcount /Hadoop/Input /Hadoop/Output
运行成功后查看 output下文件。
五、Spark2.2.0完全分布式环境搭建:
主节点:
1 官方网站下载:
http://spark.apache.org/downloads.html
2.解压并移动至相应的文件夹(usr/下新建spark);
tar -xvf spark-2.2.0-bin-hadoop2.7.tgz mv spark-2.2.0-bin-hadoop2.7 /usr/spark
3.修改相应的配置文件:
(1)/etc/profie
export SPARK_HOME=/usr/spark/spark-2.2.0-bin-hadoop2.7
export PATH=$PATH:${SPARK_HOME}/bin
(2)$SPARK_HOME/conf/spark-env.sh
cp spark-env.sh.template spark-env.sh
#配置内容如下:
export SCALA_HOME=/usr/scala/scala-2.12.3 export JAVA_HOME=/usr/java/jdk1.8.0_144 export SPARK_MASTER_IP=server1 export SPARK_WORKER_MEMORY=1g export HADOOP_CONF_DIR=/usr/hadoop/hadoop-2.7.4/etc/hadoop
(3)$SPARK_HOME/conf/slaves
cp slaves.template slaves
配置内容如下
server1
slave1
slave2
将spark包scp -r 到从节点 (注意路径一致) ,然后配置修改/etc/profile,增加spark相关的配置,如server1节点一样
启动
$SPARK-HOME/sbin/start-all.sh
2.测试spark
为了避免麻烦这里我们使用spark-shell,做一个简单的worcount的测试
用于在测试hadoop的时候我们已经在hdfs上存储了测试的源文件,下面就是直接拿来用就好了!
spark-shell
val file=sc.textFile("hdfs://server1:9000/Hadoop/Input/wordcount.txt") val rdd = file.flatMap(line => line.split(" ")).map(word => (word,1)).reduceByKey(_+_) rdd.collect() rdd.foreach(println)
成功。(也可以通过web: http://server1:8080/)查看状态
hadoop搭建过程常见错误:
1.从节点 datanode 无法启动 /启动立即停止
- xml配置文件设置了 data.dir ,name.dir , datanode namenode ID不一致 : 由于 主节点 执行了 namenode -format清空了 data , name目录下文件 , 而从节点的对应文件 还保留, 所以不一致。解决方法:手动清空从节点中的data ,name 文件夹下的所有文件。然后重新format 启动
- hosts配置错误, 127.0.0.1 localhost 必须正确!
2 nodemanager 从节点没启动/启动后立即停止: