1,首先卸载系统自带的JDK,换成Oracle的JDK:
命令如下:
首先卸载OpenJDK:Oracle java将其解压到制定目录,如: /usr/java
卸载openjdk
1) 查看openjdk的包
# rpm -qa | grep openjdk
2)卸载
#rpm -qa| grep openjdk|xargs rpm -e –nodeps
#rpm -e --nodeps java-*-gcj-*.x86_64
或者:rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
安装JDK
从Oracle官网下载JDK1.6或以上版本。解压到/usr/java目录下,并编辑/etc/profile,添加环境变量:JAVA_HOME/JAVA_OPTS/CLASSPATH/PATH,如:
JAVA_HOME=”/usr/java/jdk”
JAVA_OPTS=”-Xms1024m-Xmx2048m”
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
PATH=$JAVA_HOME/bin:$PATH
保存后,执行下面命令,使其立即生效。
source /etc/profile
最后用java –version测试。
2, 安装MAVEN:http://www.apache.org/dyn/closer.cgi/hadoop/common/;
Hadoop 源码使用maven组织管理,故需安装maven程序。解压到/usr/maven,编辑/etc/profile,添加环境变量:MAVEN_HOME/PATH,如:
MAVEN_HOME=”/usr/maven”
PATH=$PATH:$MAVEN_HOME/bin
MAVEN_HOME=/usr/maven
export MAVEN_HOME
export PATH=${PATH}:$MAVEN_HOME/bin
保存后,执行下面命令,使其立即生效。
source /etc/profile
3. 安装FINDBUGS(可选步骤
用于生成文档,如果不需要编译生成文档,可以不执行。解压到/usr/findbugs,并编辑/etc/profile,添加环境变量:
FINDBUGS_HOME=/usr/findbugs
export PATH=$PATH:$FINDBUGS_HOME/bin
保存后,执行下面命令,使其立即生效。
source /etc/profile
最后用findbugs –version测试
将protoc解压到某个目录,并进入该目录,执行下面命令:
如果提示权限不够,则先执行:#chmod u+x configure
然后: #./configure --prefix=/usr/local/proc
用了-prefix选项的另一个好处是卸载软件或移植软件。当某个安装的软件不再需要时,只须简单的删除该安装目录,就能够把软件卸载得干干净净;移植软件只需拷贝整个目录到另外一个机器即可(相同的操作系统)。
最后:#make &&make check && make install
make check:看看能不能解决hadoop编译时候出现的问题。
chmod u+x src/google/protobuf/io/gzip_stream_unittest.sh
chmod u+x src/google/protobuf/compiler/zip_output_unittest.sh
完成后,将/usr/local/proc/bin加入环境变量PATH。
使用protoc --version测试(记住,是 – 两条杠)。
同样,安装gcc的时候,它的某个关联文件需要用到 libppl.so.7 和 libppl_c.so.2 两个 库文件,它们也可以通过安装ppl-0.10.2-11.el6.i686.rpm来解决。
4, 安装其他依赖工具
Yum install cmake/yum install openssl-devel/yum install ncurses-devel (依赖关系在上面截图)
最后检查依赖包都安装了没:
rpm -q gcc
rpm -q cmake
rpm -q make
rpm -q gcc-c++
rpm -q openssl-devel
rpm -q ncurses-devel
5, 编译Hadoop源码
将下载的源码文件解压到指定目录。如:/usr/hadoop2.3.0/
;2.3.0编译以及安装。
进入该目录执行下面命令开始编译:在源码根目录下执行:
mvn package –DskipTests –Pdist,native,docs //此法呀。。。
mvn package -Pdist,native -DskipTests –Dtar
mvn clean package -Pdist,native -DskipTests -Dtar -e –X
如果没有安装findbugs,则可将docs删除。
尝试修改方法:CLASSPATH=.:$JAVA_HOME/lib/jt.jar:$JAVA_HOME/lib/tools.jar:
等待编译,编译完成后,其目标文件在target目录下。
6,编译HBase源码:http://www.aboutyun.com/thread-7150-1-1.html;
刚开始使用的是Maven3.1.0,与Maven3.0.x存在兼容性问题,所以老是出现java.lang.NoClassDefFoundError: org/sonatype/aether/graph/DependencyFilter之类的错误。
由于所建CentOS自动安装的软件包比较少,所以需要下载如下软件包并安装后才能编译:
Ant
Maven
ProtocolBuffer
findbugs
CMake
安装过程同上。
vi /etc/profile (根据自己用的软件版本,对路径做相应的修改)
export ANT_HOME=/app/ant192
export MAVEN_HOME=/app/maven305
export FINDBUGS_HOME=/app/findbugs202
export PATH=${ANT_HOME}/bin:${MAVEN_HOME}/bin:${FINDBUGS_HOME}/bin:$PATH
下载HBase源代码,并解压缩,然后赋予读写权限
[root@hadoop1 hadoop]# tar zxf hbase-0.96.0-src.tar.gz
[root@hadoop1 hadoop]# mv hbase-0.96.0 /app/hbase096_src
[root@hadoop1 hadoop]# chown -R hadoop:hadoop /app/hbase096_src
[root@hadoop1 hadoop]# cd /app/hbase096_src/dev-support
[root@hadoop1 dev-support]# chmod +x *.sh
修改pom.xml中hadoop2版本信息,并生成pom.xml.hadoop2
[root@hadoop1 app]# su - hadoop
[hadoop@hadoop1 ~]$ cd /app/hbase096_src/
[hadoop@hadoop1 hbase096_src]$ vi pom.xml
<hadoop-two.version>2.2.0</hadoop-two.version>
[hadoop@hadoop1 hbase096_src]$ dev-support/generate-hadoopX-poms.sh 0.96.0 0.96.0-hadoop2
编译
[hadoop@hadoop1 hbase096_src]$ MAVEN_OPTS="-Xmx3g" mvn -f pom.xml.hadoop2 install -DskipTests assembly:single –Prelease
生成的安装包位于hbase-assembly/target/hbase-0.96.0-hadoop2-bin.tar.gz
7,建立Hadoop用户,并且设置SSH无密码通讯
创建Hadoop专用账号:hadoop(可设置密码)
Useradd hadoop #创建用户
Passwd hadoop #设置密码 :统一用:123456
hadoop运行时需要master与各个slave之间实现无密码登录。按照我们的实例,需要配置master.hadoop无密码登录slave1.hadoop;反之亦然。
前提配置:使用root登录修改配置文件:vi /etc/ssh/sshd_config,将其中三行的注释去掉,如下:
然后重启ssh服务:service sshd restart。最后退出root,以下所有操作都在hadoop用户下进行。# su hadoop
在master与Slave主机上分别用Hadoop用户登录系统,然后运行命令:
权限修改,不一定用到:chmod 600 ~/.ssh/authorized_keys (先别用)
首先在master和slave 节点上运行:
ssh-keygen –t dsa #按默认一直回车即可。不要复制,手动输入最好。
一直回车,直到结束。
如上图,密钥文件按照默认方式,在主目录/home/hadoop下的隐藏目录.ssh中生成,分别为id_dsa和id_dsa.pub,后者为公钥,如下图
根据配置文件/etc/ssh/sshd_config中的AuthorizedKeysFile项的取 值:.ssh/authorized_keys,公钥需要导入到该文件中才能实现校验,如下:
至此离成功只有一步之遥了。CentOS默认新生成的文件权限为:-rw-rw-r--,即自己和群组用户都可以重写该文件,这被认为是不够安全的。如上图,由于此前我的主机上并未存在authorized_keys文件,现在由于重定向输出新建了该文件,因此该文件的默认权限为-rw-rw-r--仍旧不够安全。需把群组中的w权限去掉。可使用命令:chmod 644 authorized_keys。网上的资料中,都是直接chmod 600 authorized_keys,即群组和其他用户连读取文件内容的权限都没有,当然这样是最安全的,但是系统只要求到除了自己之外其他所有用户均不能改动文件就可以了。
如上图,hadoop.slave已经能够使用ssh无密码登录本机了。
(下面连接到别的机子上是不是不需要设置的?)那么如何让它无密码登录到master.hadoop主机中呢?当然是分发公钥文件id_dsa.pub的内容到master.hadoop主机上了。如下图:
如上图,执行命令 cat ~/.ssh/id_dsa.pub | ssh hadoop@master.hadoop 'cat - >> ~/.ssh/authorized_keys',并输master.hadoop主机的hadoop用户的登录密码,即可将公钥发送master.hadoop并追加到其authorized_keys文件中。然后连接测试slave连接master。
8,时间同步:
时间同步,设置一个时间服务器,其他机器与其同步
出现“the NTP socket is in use, exiting”错误。造成该原因是系统ntpd服务器正在运行中,可以通过 ps aux | grep ntpd 查看,如果还是要手动同步时间,就必须先停止该服务,service ntpd stop
; 手动修改时间,先修改时区。
9,