主节点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
在主节点,就是第一台主机的命令行下;
vim /etc/hosts
在原文件的基础上加上:
127.0.0.1 localhost 192.168.198.100 server1 192.168.198.201 slave1 192.168.198.202 slave2
注意,第一个千万不能去。否者ping不通自己。
我配置的是用户是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命令时候,就可以不用输入密码了。
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
我的习惯是将软件放置/usr目录下:
tar -xvf hadoop-2.7.3.tar.gz mv hadoop-2.7.3 /usr/hadoop
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
修改JAVA_HOME 如下:
export JAVA_HOME=/usr/java/jdk1.8.0_144
slave1
slave2
复制template,生成xml:
cp mapred-site.xml.template mapred-site.xml
内容:
再启动之前我们需要
格式化一下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下文件。
主节点:
1 官方网站下载:
http://spark.apache.org/downloads.html
tar -xvf spark-2.2.0-bin-hadoop2.7.tgz mv spark-2.2.0-bin-hadoop2.7 /usr/spark
export SPARK_HOME=/usr/spark/spark-2.2.0-bin-hadoop2.7
export PATH=$PATH:${SPARK_HOME}/bin
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
cp slaves.template slaves
配置内容如下
server1
slave1
slave2
将spark包scp -r 到从节点 (注意路径一致) ,然后配置修改/etc/profile,增加spark相关的配置,如server1节点一样
启动
$SPARK-HOME/sbin/start-all.sh
为了避免麻烦这里我们使用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 无法启动 /启动立即停止
2 nodemanager 从节点没启动/启动后立即停止: