一、 基本布局
1、 服务器分布:
10.168.9.240 主名字节点,同时为数据节点
10.168.9.241 备名字节点,同时数据节点
10.168.9.242 数据节点
2、 HOSTS设置:
10.168.9.240 namenode1
10.168.9.241 namenode2
10.168.9.242 datanode1
注意:hostname不能使localhost(127.0.0.1),应该设成本机具体IP,并且要保持/etc/hosts与/etc/sysconf/network一致
3、 SSH免密码登录:
具体参见脚本:
- #!/bin/sh
- rm -rf ~/.ssh
- ssh-keygen
- cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- chmod 600 ~/.ssh/authorized_keys
- #scp ~/.ssh/id_rsa.pub root@namenode2: ~/.ssh/
- service sshd restart
- ssh localhost
注:权限对ssh的设置影响很大
下面的各个操作,可以只在一台机器上进行,然后利用ssh的scp拷贝到其它机器上,命令格式为:scp ~/.ssh/id_rsa.pub root@namenode2: ~/.ssh/,其中root不是用户名,是权限的意思。
二、安装一些相关软件(主要是为了编译hadoop和开发环境搭建)
安装的软件有:JDK(1.8版本存在问题)、MAVEN、PROTOBUF、cmake、ncurses和openss以及hadoop。我在进行安装时都是以共享连接的形式ln -s到/usr/local/目录下的,注意此时要用绝对路径。
三、Hadoop YARN 分布式集群配置
1、 添加相应的环境变量:
# vim /etc/profile
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_PID_DIR=/data/hadoop/pids
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HDFS_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# source /etc/profile
2、 创建(主要是为hadoop的tmp.dir配置路径,不配也行试过)
mkdir -p $HADOOP_HOME/{pids,storage}
mkdir -p $HADOOP_HOME/{pids,storage1}
mkdir -p $HADOOP_HOME/storage/{hdfs,tmp}
mkdir -p $HADOOP_HOME/torage/hdfs/{name,data}
3、 配置 core-site.xml(vi $HADOOP_HOME/etc/hadoop/core-site.xml)
- <configuration>
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://namenode1:9000</value>
- </property>
- <!--单次文件缓存大小,默认是4K(32位的一个页面大小 )-->
- <property>
- <name>io.file.buffer.size</name>
- <value>131072</value>
- </property>
- <property>
- <name>hadoop.tmp.dir</name>
- <value>file:$HADOOP_HOME/storage/tmp</value>
- </property>
- </configuration>
4、 配置 hdfs-site.xml(vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml)
- <configuration>
- <!--此处可以不填,不填此时将启动的node作为备份节点-->
- <property>
- <name>dfs.namenode.secondary.http-address</name>
- <value>namenode2:9000</value>
- </property>
- <!--此处要是只用一个目录,则会给出警告-->
- <property>
- <name>dfs.namenode.name.dir</name>
- <value>file:///$HADOOP_HOME/storage/hdfs/name,file:///$HADOOP_HOME/storage1/hdfs/name</value>
- </property>
- <property>
- <name>dfs.datanode.data.dir</name>
- <value>file:///$HADOOP_HOME/storage/hdfs/data,file:///$HADOOP_HOME/storage1/hdfs/data</value>
- </property>
- <property>
- <!--设置拷贝数据的个数,与slaves个数保持一致-->
- <name>dfs.replication</name>
- <value>3</value>
- </property>
- <property>
- <name>dfs.webhdfs.enabled</name>
- <value>true</value>
- </property>
- </configuration>
5、 配置mapred-site.xml(vi $HADOOP_HOME/etc/hadoop/mapred-site.xml)
- <configuration>
- <property>
- <name>mapreduce.framework.name</name>
- <value>yarn</value>
- </property>
- <property>
- <name>mapreduce.jobhistory.address</name>
- <value>namenode1:10020</value>
- </property>
- <property>
- <name>mapreduce.jobhistory.webapp.address</name>
- <value>namenode1:19888</value>
- </property>
- </configuration>
6、 配置yarn-site.xml(vi $HADOOP_HOME/etc/hadoop/yarn-site.xml)
- <configuration>
- <property>
- <name>yarn.nodemanager.aux-services</name>
- <value>mapreduce_shuffle</value>
- </property>
- <property>
- <!--
- 此处要是用mapreduce_shuffle,会给出一个警告;
- 此处要是用mapreduce.shuffle,则会报错;
- 此处要是不填,则正常
- -->
- <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
- <value>org.apache.hadoop.mapred.ShuffleHandler</value>
- </property>
- <property>
- <name>yarn.resourcemanager.scheduler.address</name>
- <value>namenode1:8030</value>
- </property>
- <property>
- <name>yarn.resourcemanager.resource-tracker.address</name>
- <value>namenode1:8031</value>
- </property>
- <property>
- <name>yarn.resourcemanager.address</name>
- <value>namenode1:8032</value>
- </property>
- <property>
- <name>yarn.resourcemanager.admin.address</name>
- <value>namenode1:8033</value>
- </property>
- <property>
- <name>yarn.resourcemanager.webapp.address</name>
- <value>namenode1:80</value>
- </property>
- </configuration>
7、 配置 hadoop-env.sh、mapred-env.sh、yarn-env.sh(在开头添加)
1)、文件路径:
$HADOOP_HOME/etc/hadoop/hadoop-env.sh
$HADOOP_HOME/etc/hadoop/mapred-env.sh
$HADOOP_HOME/etc/hadoop/yarn-env.sh
2)、添加内容
export JAVA_HOME=/usr/local/jdk
export CLASS_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_PID_DIR=/data/hadoop/pids
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"
export HADOOP_PREFIX=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HDFS_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
8、 数据slaves节点配置(放在此处的节点为slaves节点)
位置:vi $HADOOP_HOME/etc/hadoop/slaves
9、 Hadoop简单测试:(都在master节点上进行)
hadoop namenode -format
tart-dfs.sh
#看看相应的resourcemanager和datanode等节点是否起来。
hdfs与mapreduce测试
#创建个目录: /usr/rocketzhang
hdfs dfs -mkdir -p /user/rocketzhang
#上传一个本地文件
hdfs dfs -put bin/hdfs.cmd /user/rocketzhang
#WordCount程序 测试
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /user/rocketzhang /user/out
注意:在此过程中经常出现两种错误:无法连接和datanode节点没起来,大多数是因为防火墙没关闭和需要删除core*.xml中定义tmp.dir目录下的current并重新format。
查看监控页面URL:http://10.168.9.240:8080/(我搭建时的url),看是否可以正常显示。
二、 Spark 分布式集群配置
1、 下载相关软件:
http://www.scala-lang.org/files/archive/scala-2.9.3.tgz
http://d3 kbcqa49mib13.cloudfront.net/spark-0.8.1-incubating-bin-hadoop2.tgz
安装并设置相关的环境变量,装完之后利用ln -s命令将其link到/user/local
录下,注意此时最好用绝对路径
2、 对spark进行操作,如下:
cd /usr/local/spark/conf
vi spark-env.sh
export JAVA_HOME=/usr/local/jdk
export SCALA_HOME=/usr/local/scala
export HADOOP_HOME=/usr/local/hadoop
mv spark-env.sh.template spark-env.sh
设置slaves,打开slaves,添加datanode节点
3、 启动Yarn,有三种方式:start-all.sh(start-dfs.sh、start-yarn.sh)、start-yarn.sh或yarn-demo.sh
4、 简单测试:
还是提供过URL打开和上面一样,显示如下界面:
切换到/usr/local/spark目录
1)、本地测试:
./run-example org.apache.spark.examples.SparkPi local
2)、普通集群模式
./run-example org.apache.spark.examples.SparkPi spark://namenode1:7077
./run-example org.apache.spark.examples.SparkLR spark://namenode1:7077
./run-example org.apache.spark.examples.SparkKMeans spark://namenode1:7077 file:/usr/local/spark/kmeans_data.txt 2 1
注:此处不能用namenode1,要用具体IP地址
运行完之后,url界面会有如下显示:
5、 结合HDFS的集群模式
hadoop fs -put README.md / /user/rocketzhang(不能用相对路径,无法识别)
MASTER=spark://10.168.9.240:7077 ./spark-shell
scala> val file = sc.textFile("hdfs://namenode1:9000/user/root/README.md")
scala> val count = file.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_+_)
scala> count.collect()
scala> :quit