Hadoop入门系列(2) -- Hadoop运行环境搭建
来源:互联网 发布:java调用db2存储过程 编辑:程序博客网 时间:2024/06/05 14:42
由于服务器上一般centos的系统安装得比较多,我们环境使用CentOS 6.3 64位操作系统来运行Hadoop。同时,hadoop依赖于java,所以os上要安装好
jdk,一般安装centos时注意下选择openjdk就可以,限于篇幅,这里不讲解centos6.3的安装,上网任意搜索都可以查看到教程。
Hadoop版本选择上,我们选择较新的1.2.1版本。
另外,如果你是从头开始安装整套环境,那么可以在一台上先安装好后,再把整个系统镜像到其他多台机子上,只需要注意mac地址问题、主机ip和主机名即可,其他hadoop程序、hadoop配置在所有机子上都是一样的,不管是master还是slave
安装Hadoop
从apache的官方镜像上下载Hadoop的安装包,http://mirrors.cnnic.cn/apache/hadoop/common/hadoop-1.2.1/ ,这里选择hadoop-1.2.1的版本
下载好的tar.gz的包,在centos上任意解压就行。我们这里把它解压到/usr/目录下
[root@hmaster hadoop]# tar xzvf hadoop-1.2.1.tar.gz -C /usr/[root@hmaster hadoop]# mv /usr/hadoop-1.2.1 /usr/hadoop
解压后,Hadoop的安装就算完了,因为它是基于jar的,所以部署十分方便
配置Hadoop
我们这边为了方便,直接使用root用户,因为如果使用其他用户,那么后面如果没有配置好的话,运行Hadoop应用会提示权限的问题。
修改host
我们首先要定义host,用它来代替ip。修改/etc/hosts文件,如下面的输入
192.168.6.110 hmaster192.168.6.111 hslave1192.168.6.112 hslave2192.168.6.113 hslave3192.168.6.114 hslave4
上面配置中,我们把当前机子192.168.6.110配置为hadoop的集群,其他为slave。同时,对每台机子,设置它的host name和ip,使它与这个hosts文件对应,更改主机名的命令如下:
[root@hmaster hadoop]# vi /etc/sysconfig/network
把该文件中的HOSTNAME改为/etc/hosts中对应的host名
配置环境变量
我们在/etc/profile中输入如下内容,用来设置hadoop环境变量(如果不使用mahout的话,可以把它的路径去掉)
export JAVA_HOME='/usr/lib/jvm/java-1.6.0-openjdk.x86_64'export MAHOUT_HOME=/usr/mahoutexport CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$MAHOUT_HOME/libexport PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$MAHOUT_HOME/bin export HADOOP_HOME=/usr/hadoopexport PATH=$PATH:$HADOOP_HOME/binexport HADOOP_HOME_WARN_SUPPRESS=1
配置hadoop中的文件
hadoop中修改配置文件,只要修改几个文件即可,这些文件都在hadoop的安装目录下,如/usr/hadoop/conf下
- hadoop_env.sh
因为我们在profile中已经配置了一些环境变量,这边可以不配置了
- 修改core-site.xml文件
<configuration> <property> <name>hadoop.tmp.dir</name> <value>/usr/hadoop/tmp</value> <description>A base for other temporary directories.</description> </property> <!-- file system properties --> <property> <name>fs.default.name</name> <value>hdfs://hmaster:9000</value> </property></configuration>
这里设置hadoop临时目录,和hdfs的地址
- 修改hdfs-site.xml文件
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
这里设置hdfs文件系统只冗余一份数据
- 修改mapred-site.xml
<configuration> <property> <name>mapred.job.tracker</name> <value>http://hmaster:9001</value> </property></configuration>
这里配置mapreduce的jobtracker的地址
- 修改masters和slaves文件
在masters文件中输入我们master主机的hostname
hmaster
slaves文件中输入所有slave的hostname,内容如下
hslave1hslave2hslave3hslave4
配置ssh免密码登录
这里要实现在master上免密码登录所有的slave,首先在master上使用如下命令生成无密码私钥和公钥
ssh-keygen -t rsa -P ''
- 方法1:
然后多次调用如下命令把公钥拷到各个slave机子上,在要求输入密码时,输入slave的密码
ssh-copy-id -i ~/.ssh/id_rsa.pub root@hslave1:~/
- 方法2:
在master机子,接着执行如下命令
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keysecho "RSAAuthentication yes" >> /etc/ssh/sshd_config echo "PubkeyAuthentication yes " >> /etc/ssh/sshd_config echo "AuthorizedKeysFile .ssh/authorized_keys " >> /etc/ssh/sshd_config service sshd restart
接着用scp把id_rsa_pub拷贝到远程slave主机上
scp ~/.ssh/id_rsa.pub root@hslave1:~/
拷贝镜像后修改网卡信息
如果你是用拷贝整个系统的方式来部署多台机子,那么要对复制的机子进行一些网卡的修改,否则会存在mac冲突等问题。
启动复制后的机子,打开 /etc/udev/rules.d/70-persistent-net.rules文件
# PCI device 0x8086:0x100f (e1000)SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:c6:77:44", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" # PCI device 0x8086:0x100f (e1000)SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:3a:fb:86", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
可以看到,由于物理网卡(或虚拟网卡)mac地址变化,udev会检测出两个eth,删除旧的eth0,把第二个eth1改为eth0,修改后如下
# PCI device 0x8086:0x100f (e1000)SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:3a:fb:86", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
打开 /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0BOOTPROTO=noneHWADDR=00:0c:29:c6:77:44NM_CONTROLLED=yesONBOOT=yesTYPE=EthernetUUID="32ae4a4c-631a-4c39-8e6a-66714c43ca90"IPADDR=192.168.6.110NETMASK=255.255.255.0GATEWAY=192.168.6.254IPV6INIT=noUSERCTL=no
可以看到HWADDR这个mac地址还是原来第一台主机的mac,这里把它改成udev中的mac,并把uuid注册掉,修改ip后,效果如下
DEVICE=eth0BOOTPROTO=noneHWADDR=00:0c:29:3a:fb:86NM_CONTROLLED=yesONBOOT=yesTYPE=Ethernet#UUID="32ae4a4c-631a-4c39-8e6a-66714c43ca90"IPADDR=192.168.6.111NETMASK=255.255.255.0GATEWAY=192.168.6.254IPV6INIT=noUSERCTL=no
这里可以同时修改/etc/sysconfig/network文件中的hostname后,重启机子,这台机子就完全不会跟被拷贝的机子冲突了。
启动验证
验证之前要保证master能够免密码登录所有slave,在master上依次执行如下命令
ssh hmasterssh hslave1ssh hslave2ssh hslave3ssh hslave4
如果ssh某个主机时,提示输入 yes or no, 则输入 yes连接上后,断开再试,看是否不用提示直接就能登录了。
关闭防火墙和selinux
验证之前一定要关闭防火墙和selinux
vim /etc/sysconfig/selinux
把SELINUX=enforcing中的enforcing修改为disabled
setenforce 0service iptables stopchkconfig iptables off
格式化文件系统
在master上输入如下命令
[root@hmaster hadoop]# hadoop namenode -format15/05/27 11:42:00 INFO namenode.NameNode: STARTUP_MSG: /************************************************************STARTUP_MSG: Starting NameNodeSTARTUP_MSG: host = hmaster/192.168.6.110STARTUP_MSG: args = [-format]STARTUP_MSG: version = 1.2.1STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152; compiled by 'mattf' on Mon Jul 22 15:23:09 PDT 2013STARTUP_MSG: java = 1.6.0_24************************************************************/15/05/27 11:42:00 INFO util.GSet: Computing capacity for map BlocksMap15/05/27 11:42:00 INFO util.GSet: VM type = 64-bit15/05/27 11:42:00 INFO util.GSet: 2.0% max memory = 93211852815/05/27 11:42:00 INFO util.GSet: capacity = 2^21 = 2097152 entries15/05/27 11:42:00 INFO util.GSet: recommended=2097152, actual=209715215/05/27 11:42:00 INFO namenode.FSNamesystem: fsOwner=root15/05/27 11:42:00 INFO namenode.FSNamesystem: supergroup=supergroup15/05/27 11:42:00 INFO namenode.FSNamesystem: isPermissionEnabled=true15/05/27 11:42:00 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=10015/05/27 11:42:00 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)15/05/27 11:42:00 INFO namenode.FSEditLog: dfs.namenode.edits.toleration.length = 015/05/27 11:42:00 INFO namenode.NameNode: Caching file names occuring more than 10 times 15/05/27 11:42:00 INFO common.Storage: Image file /usr/hadoop/tmp/dfs/name/current/fsimage of size 110 bytes saved in 0 seconds.15/05/27 11:42:00 INFO namenode.FSEditLog: closing edit log: position=4, editlog=/usr/hadoop/tmp/dfs/name/current/edits15/05/27 11:42:00 INFO namenode.FSEditLog: close success: truncate to 4, editlog=/usr/hadoop/tmp/dfs/name/current/edits15/05/27 11:42:00 INFO common.Storage: Storage directory /usr/hadoop/tmp/dfs/name has been successfully formatted.15/05/27 11:42:00 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************SHUTDOWN_MSG: Shutting down NameNode at hmaster/192.168.6.110************************************************************/
输出如上述所示,则表示文件系统创建成功了。
启动hadoop集群
在master上执行如下命令,启动集群
[root@hmaster hadoop]# start-all.sh starting namenode, logging to /usr/hadoop/libexec/../logs/hadoop-root-namenode-hmaster.outhslave2: starting datanode, logging to /usr/hadoop/libexec/../logs/hadoop-root-datanode-hslave2.outhslave3: starting datanode, logging to /usr/hadoop/libexec/../logs/hadoop-root-datanode-hslave3.outhslave1: starting datanode, logging to /usr/hadoop/libexec/../logs/hadoop-root-datanode-hslave1.outhslave4: starting datanode, logging to /usr/hadoop/libexec/../logs/hadoop-root-datanode-hslave4.outhmaster: starting secondarynamenode, logging to /usr/hadoop/libexec/../logs/hadoop-root-secondarynamenode-hmaster.outstarting jobtracker, logging to /usr/hadoop/libexec/../logs/hadoop-root-jobtracker-hmaster.outhslave1: starting tasktracker, logging to /usr/hadoop/libexec/../logs/hadoop-root-tasktracker-hslave1.outhslave2: starting tasktracker, logging to /usr/hadoop/libexec/../logs/hadoop-root-tasktracker-hslave2.outhslave4: starting tasktracker, logging to /usr/hadoop/libexec/../logs/hadoop-root-tasktracker-hslave4.outhslave3: starting tasktracker, logging to /usr/hadoop/libexec/../logs/hadoop-root-tasktracker-hslave3.out
使用jps命令在各个机子上查看java应用是否启动
[root@hmaster hadoop]# jps2421 SecondaryNameNode2238 NameNode2651 Jps2514 JobTracker
在slave上查看,应用如下
[root@hslave1 usr]# jps2202 DataNode2301 TaskTracker2401 Jps
通过网页查看集群状态,在浏览器中输入 http://192.168.6.110:50030,其中6.110是master的ip。点击网页中的Node节点数,可以看到所有Node的情况
hadoop常用命令
文件系统
这类命令以fs开头,主要是对hdfs的相关操作,主要有
- 显示文件
hadoop fs -ls
上传文件:
把linux文件系统中的input目录上传到hdfs文件系统中
hadoop fs -put input
- 删除文件
hadoop fs -rm input
- 移动文件
hadoop fs -mv input input1
运行MR应用
在要运行的jar包的目录中运行
hadoop jar aaa.jar
hadoop常用告警处理
启动startall时,jps查看部分设备未启动节点
清除旧的数据,重新格式化dfs文件系统
rm -rf /usr/hadoop/tmpmkdir /usr/hadoop/tmprm -rf /tmp/hadoop*hadoop namenode -format
safemode错误
如果出现如下错误
org.apache.hadoop.dfs.SafeModeException: Cannot delete..., Name node is in safe mode
那么可以使用如下命令禁用安全模式::
hadoop dfsadmin -safemode leave
- Hadoop入门系列(2) -- Hadoop运行环境搭建
- Hadoop入门系列(3) -- Eclipse+Hadoop开发环境搭建
- hadoop on yarn 入门系列1-伪分布式环境搭建并运行wordcount
- (Hadoop入门系列一)Hadoop集群搭建
- hadoop运行环境的搭建
- (11.1.2)Hadoop基础教程-运行环境搭建
- VMwareWorkstation12+CentOS+xshell搭建Hadoop运行环境
- 搭建Eclipse运行hadoop案例的环境
- hadoop平台搭建(3)--hadoop安装、环境配置、单机运行
- RHadoop实践系列之一:Hadoop环境搭建
- RHadoop实践系列之一:Hadoop环境搭建
- hadoop系列教程第二讲:环境搭建
- Hadoop初探系列(一)Windows下Hadoop环境搭建
- hadoop入门一(基础搭建环境)
- hadoop入门七(搭建环境)
- hadoop入门八(搭建环境)
- hadoop入门:2.Hadoop-1.12伪分布环境搭建
- Hadoop入门之Hadoop伪分布式环境搭建
- C++之探索多态的本质(虚函数与虚表)2
- 从ACM中删除一个已经创建的Library
- oracle数据库优化
- 4、mkdir命令
- 菜鸟程序员的在CSDN中的开篇
- Hadoop入门系列(2) -- Hadoop运行环境搭建
- tomcat项目发布
- Linux打tar包命令
- ReactJS学习笔记七:表单
- zendstudio 汉化
- 第七章 函数
- [算法]求最大连续子数组和的PHP程序
- 大数据性能调优之HBase的RowKey设计
- GC Tuning -GC优化