此文在VM虚拟机环境下进行,因为编译好的hadoop没有64位版本,所以需要自己编译,事先准备如下:
1.虚拟机的准备
先创建一个虚拟机,虚拟机网络连接方式为桥接,
建立后关闭防火墙:
systemctl stop firewalld.service //停止防火墙
systemctl disable firewalld.service //禁止防火墙启动
最小安装的CentOS默认没有启动网络,所以要先用dhclient命令启动网络,否则不能上网,也不能安装所需插件。
能够上网后,使用yum install net-tools命令下载后面ifconfg命令所需的包。
卸载CentOS本身自带的OpenJAVA:
首先,在终端中输入“rpm -qa|grep gcj”,查看gcj的版本号,在这里得到的结果是:
java-1.4.2-XXXX
java-1.6.0-XXXX
其次,卸载系统自带jdk。在终端中输入“yum -y remove java java-XXXX.XXXX.....”,然后等待,等待系统卸载完自带的jdk。最终在终端中显示“Complete!”,卸载完成。
到sun公司下载JDK1.7,注意只能用1.7,否在后面编译会出错,网上有用命令下载成功的,不知道为什么我照做结果总是失败,后来只好在图形界面下下载,下载好以后放到自己喜欢的目录,并配置/etc/profile:
export JAVA_HOME=/usr/java/jdk1.7.0_02 //地址跟版本根据自己下载和解压存放修改
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
完成后运行source /etc/profile(或./etc/profile)重载环境变量,使用java -version命令查看新java是否安装成功。
可以编写脚本卸载跟安装。
安装各种工具:
yum install cmake lzo-devel zlib-devel gcc gcc-c++ autoconf automake libtool ncurses-devel openssl-devel libXtst
安装protobuf
下载protobuf-2.5.0,不能用高版本,否则Hadoop编译不能通过
wget https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz
tar xvf protobuf-2.5.0.tar.gz
cd protobuf-2.5.0
./configure
make
make install
ldconfig
检验安装是否成功protoc --version
安装ANT
wget http://mirror.bit.edu.cn/apache/ant/binaries/apache-ant-1.9.4-bin.tar.gz
tar zxvf apache-ant-1.9.4-bin.tar.gz -C /app
vi /etc/profile
export ANT_HOME=/app/apache-ant-1.9.4
PATH=$PATH:$ANT_HOME/bin
安装maven:
maven官方下载地址,可以选择源码编码安装,这里就直接下载编译好的 就可以了
wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.zip
同样在/etc/profie里配置环境变量
export MAVEN_HOME=/opt/maven3.1.1
export PATH=$PATH:$MAVEN_HOME/bin
source重载环境变量,验证配置是否成功: mvn -version
修改maven配置文件
vi /app/apache-maven-3.3.1/conf/settings.xml
更改maven资料库,在<mirrors></mirros>里添加如下内容:
<mirror>
<id>nexus-osc</id>
<mirrorOf>*</mirrorOf>
<name>Nexusosc</name>
<url>http://maven.oschina.net/content/groups/public/</url>
</mirror>
在<profiles></profiles>内新添加
<profile>
<id>jdk-1.7</id>
<activation>
<jdk>1.7</jdk>
</activation>
<repositories>
<repository>
<id>nexus</id>
<name>local private nexus</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>local private nexus</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
安装findbugs(非必须)
wget http://prdownloads.sourceforge.net/findbugs/findbugs-3.0.1.tar.gz?download
tar zxvf findbugs-3.0.1.tar.gz -C /app
vi /etc/profile
export FINDBUGS_HOME=/app/findbugs-3.0.1
PATH=$PATH:$FINDBUGS_HOME/bin
export PATH
注意:
最终,在/etc/profile中环境变量PATH的设置如下:
PATH=$PATH:$JAVA_HOME/bin:$ANT_HOME/bin:$MAVEN_HOME/bin:$FINDBUGS_HOME/bin(也可以各个分开)
export PATH
使环境变量生效
编译 Hadoop2.6.0
wget http://mirror.bit.edu.cn/apache/hadoop/core/hadoop-2.6.0/hadoop-2.6.0-src.tar.gz
cd hadoop-2.6.0-src
mvn package -DskipTests -Pdist,native -Dtar
静待编译完成。如果遇到编译下载特别慢的情况,建议购买VPN。
hadoop目录尽量放在根目录,省去后面要输入很长的目录名。
配置hadoop:
1.添加hadoop环境变量:
export HADOOP_HOME=XXX //hadoop地址,2.6编译出来后在hadoop/hadoop-dist/target/hadoop-2.6.0
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=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native
export HADOOP_LOG_DIR=XXX //log文件地址,在编译出来的文件夹的hadoop/hadoop-dist/target/hadoop-2.6.0/logs
export YARN_LOG_DIR=$HADOOP_LOG_DIR
下面的配置各项意义可以参考这篇文章
2.配置hadoop-env.sh与yarn-env.sh,在其中加入:
export JAVA_HOME= //本机java文件地址
3.配置core-site.xml,在<configuration>标签中加入相应内容,使其变为以下样子:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name> //temp文件夹,自己创建
<value>file:/app/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>hadoop.proxyuser.hduser.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hduser.groups</name>
<value>*</value>
</property>
</configuration>
4.配置hdfs-site.xml,加入下面内容:
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/app/hadoop/dfs/name</value> //自己创建的name文件夹
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/app/hadoop/dfs/data</value> //自己创建的data文件夹
</property>
<property>
<name>dfs.replication</name>
<value>2</value> //数据副本数,一般3足够
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
5.配置yarn-site.xml,加入下面内容,注意value值不能有空格,否则格式化跟启动都会失败:
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</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>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>15360</value>
</property>
</configuration>
6.配置mapred-site.xml,加入下面内容:
<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>
配置完成后可以尝试格式化namenode然后启动hadoop,成功即可以进行下一步。
安装spark
Spark有源码可以下载,这里不做编译的介绍,下载好spark并解压后,复制spark/conf里面的spark-env.sh和slaves文件,分别加入下面内容:
spark-env.sh:
export HADOOP_CONF_DIR=/usr/local/hadoop-2.6.0-src/hadoop-dist/target/hadoop-2.6.0
export SCALA_HOME=/app/scala-2.10.5
export JAVA_HOME=/usr/local/java/jdk1.7.0_79
export SPARK_JAR=/app/spark-1.3.1-bin-hadoop2.6/lib/spark-assembly-1.3.1-hadoop2.6.0.jar
下面的内容可选择添加,各自作用在spark-env.sh里面都有说明:
exportSPARK_MASTER_IP=namenode
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_CORES=1
export SPARK_WORKER_INSTANCES=1
exportSPARK_WORKER_MEMORY=2g
slaves://也可以把master加入这里
slaver1
slaver2
……
在/etc/profile中加入:
export SPARK_HOME=/app/spark-1.3.1-bin-hadoop2.6
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
export CLASSPATH=$SPARK_HOME/conf:$SPARK_HOME/lib/spark-assembly-1.3.1-hadoop2.6.0.jar
在bash_profile中加入下面内容,用于运行spark示例代码:
export SPARK_EXAMPLES_JAR=/app/spark-1.3.1-bin-hadoop2.6/examples/target/scala-2.10.5/spark-examples-1.3.1-hadoop2.6.0.jar
虚拟机复制:
后面的虚拟机都由第一个复制。对复制的虚拟机修改网卡地址,配置使用命令 vi /etc/sysconfig/network-scripts/ifcfg-eno1677736,其中的具体参数由ifconfg命令查找,下面参数只是示例。
BOOTPROTO=static //静态地址
ONBOOT=yes //开机启动
IPADDR=192.168.1.98//修改IP地址,每个虚拟机不一样,可以先在dhcp模式下查看
NETMASK=255.255.255.0//修改子网掩码
GATEWAY=192.168.1.1//修改网关
HWADDR= //对应的网卡物理地址
修改完毕后,使用service network restart重启网络以生效。
根据虚拟机数量,编辑/etc/hosts,样式如下,具体根据每个虚拟机静态地址:
192.168.X.X master
192.168.X.X slave1
192.168.X.X slave2
192.168.X.X slave3
………………
并发送到每个虚拟机:scp /etc/host root@slave1 /etc/
对每个主机设置主机名,
vi /etc/sysconfig/network
将hostname改为master(在master,即选为主节点的那台上,另外两台分别改为slave1,slave2,与上面的设计、规划一致即可)
1 NETWORKING=yes
2 HOSTNAME=master
退出编辑,执行hostname master 更改主机名(slave1,slave2操作类似,不再赘述)
# hostname master
重新打开,看到生效
配置ssh无密码登录,参考下面的网址:
http://www.linuxidc.com/Linux/2012-05/61346.htm
简介如下:
(1).在namenode机器上
cd /home/myhadoop
ssh-keygen -t rsa
一路回车
(2).导入公钥到本机认证文件
cat ~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys
(3).导入公钥到其他datanode节点认证文件
scp ~/.ssh/authorized_keys myhadoop@10.172.169.192:/home/myhadoop/.ssh/authorized_keys
scp ~/.ssh/authorized_keys myhadoop@10.172.169.193:/home/myhadoop/.ssh/authorized_keys
scp ~/.ssh/authorized_keys myhadoop@10.172.169.194:/home/myhadoop/.ssh/authorized_keys
(4).修改所有机器上的文件权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
(5).测试是否可以ssh无密码登录。
如果namenode可以无密码登录到各个datanode机器,则说明配置成功。
启动集群:
在hadoop/bin目录下用 ./hadoop namenode -format格式化namenode,如果格式化失败,最好清空dfs、name、temp文件夹内容,同时查看这几个文件夹的权限是否设置正确。
成功可以在后面十来行附近看到successful字样。
格式化成功后在sbin目录使用start-dfs.sh命令启动dfs,用start-yarn.sh启动yarn,在各个主机上用jps命令查看启动情况,出错查看log文件排查原因。
在浏览器使用http://master:50070地址,利用webUI查看集群情况。也可以用hadoop dfsadmin -report命令查看。
所有都正常以后,启动spark,此时不能直接输入start-all.sh命令,命令应为:./sbin/start-all.sh
使用jps查看启动情况,分别在master:50070和master:8080查看hadoop跟spark状态
测试系统是否正常,上传文件到hdfs,运行wordcount:
先进入到hadoop的bin目录:
mkdir input //创建本地input文件
cd input //进入input
cat input/file This is a word count test on hadoop-2.6 //创建含有内容的待分析文件
./hadoop fs -copyFromLocal input /input //或者./hadoop fs -put input/ /input上传file文件到hdfs
./hadoop fs -ls /input //查看是否上传成功
./hadoop ./hadoop jar ##自己的hadoop安装目录##/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount /input /output //input为hdfs输入文件夹,output为输出
等待运行结束
./hadoop fs -cat /output/* //查看运行结果
测试spark:
./hadoop fs -put /app/spark-1.3.1-hadoop2.6/README.md /input
在spark的bin目录下启动spark-shell,运行:
val file = sc.textFile("hdfs:master:9000/input/README.md")
val sparks = file.filter(_.contains("Spark"))
sparks.count
1.3.1版本结果为19
多次运行count后在spark webui的4040端口查看运行耗时,然后用sparks.cache命令把sparks储存到内存中,再次运行count,查看时间差异。
成功后,利用VM虚拟机在CentOS 7上部署基于hadoop2.6的Spark1.3.1就全部结束了。
参考:
http://www.linuxidc.com/Linux/2015-03/115272.htm CentOS 64位上编译 Hadoop 2.6.0
http://www.cnblogs.com/nmj93/p/4169781.html
http://blog.csdn.net/xuechongyang/article/details/8691518 hadoop配置文件参数解释
http://www.itnose.net/detail/6182168.html