18台机器:1台namenode+17台datanode
!!!配置hadoop时候先部署namenode,再利用rsync把hadoop目录同步到所有的datanode上面!!!
1. 安装JDK:
- mkdir -p /usr/local/java;
- wget http://100.100.144.187/jdk-7u51-linux-x64.gz;
- tar xzvf jdk-7u51-linux-x64.gz -C /usr/local/java;
- rm -f jdk-7u51-linux-x64.gz;
最终/etc/profile加上以下内容:
export JAVA_HOME=/usr/local/java/jdk1.7.0_51
export CLASSPATH=${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tool.jar:${JAVA_HOME}/jre/lib/rt.jar:.
export HADOOP_HOME=/data/hadoop/hadoop-2.6.0
export HADOOP_MAPRED_HOME=${HADOOP_HOME}
export HADOOP_COMMON_HOME=${HADOOP_HOME}
export HADOOP_HDFS_HOME=${HADOOP_HOME}
export YARN_HOME=${HADOOP_HOME}
# Native Path
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_COMMON_LIB_NATIVE_DIR"
export MAVEN_HOME=/usr/local/apache-maven-3.2.1
export ANT_HOME=/usr/local/apache-ant-1.9.4
export PATH=${JAVA_HOME}/bin:$ANT_HOME/bin:$MAVEN_HOME/bin:${HADOOP_HOME}/bin/:${HADOOP_HOME}/sbin/:$PATH
export CLASSPATH=${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tool.jar:${JAVA_HOME}/jre/lib/rt.jar:.
export HADOOP_HOME=/data/hadoop/hadoop-2.6.0
export HADOOP_MAPRED_HOME=${HADOOP_HOME}
export HADOOP_COMMON_HOME=${HADOOP_HOME}
export HADOOP_HDFS_HOME=${HADOOP_HOME}
export YARN_HOME=${HADOOP_HOME}
# Native Path
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_COMMON_LIB_NATIVE_DIR"
export MAVEN_HOME=/usr/local/apache-maven-3.2.1
export ANT_HOME=/usr/local/apache-ant-1.9.4
export PATH=${JAVA_HOME}/bin:$ANT_HOME/bin:$MAVEN_HOME/bin:${HADOOP_HOME}/bin/:${HADOOP_HOME}/sbin/:$PATH
2. 设置SSH免密码:
- ssh-keygen -t rsa 之后一路回 车(产生秘钥)
- 把id_rsa.pub 追加到授权的 key 里面去(cat id_rsa.pub >> authorized_keys)
- 重启 SSH 服 务命令使其生效 :service sshd restart
3. 设置hosts:修改/etc/hosts 文件
ip1 namenode-0
ip2 datanode-0
...
ip18 datanode-17
4. 关闭防火墙:
- service iptables stop;
- chkconfig iptables off;
5. 修改hadoop配置文件(/data/hadoop/hadoop-2.2.0/etc/hadoop):
5.1 修改hadoop-env.sh(记录脚本要用的环境变量):export
JAVA_HOME=/usr/local/java/jdk1.7.0_51
5.2 修改yarn-env.sh():export JAVA_HOME=/usr/local/java/jdk1.7.0_51
5.3 修改slaves: 把datanode-0到datanode-17加入到slaves
5.4 修改core-site.xml(Hadoop核心配置项)
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://namenode-0:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/temp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>hadoop.native.lib</name>
<value>true</value>
<description>Should native hadoop libraries, if present, be used.</description>
</property>
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
<property>
<name>fs.checkpoint.period</name>
<value>3600</value>
<description>The number of seconds between two periodic checkpoints. </description>
</property>
<property>
<name>fs.checkpoint.size</name>
<value>67108864</value>
<description>The size of the current edit log (in bytes) that triggers a periodic checkpoint even if the fs.checkpoint.period hasn't expired. </description>
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>file:/home/hadoop/dfs/namesecondary</value>
<description>Determines where on the local filesystem the DFS secondary name node should store the temporary images to merge. If this is a comma-delimited list of directories then the image is replicated in all of the directories for redundancy. </description>
</property>
</configuration>
5.5 修改hdfs-site.xml(Hadoop守护进程配置项,例如namenode,secondarynamenode和datanode等)
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>namenode-0:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
5.6 修改mapred-site.xml(MapReduce守护进程配置项,包括jobtracker和tasktracker。)
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>namenode-0:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>namenode-0:19888</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>4000</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>2000</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx4000m</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx2000m</value>
</property>
</configuration>
5.7 修改yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</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>namenode-0:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>namenode-0:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>namenode-0:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>namenode-0:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>namenode-0:8088</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://namenode-0:19888/jobhistory/logs/</value>
</property>
<!--
<property>
<name>yarn.nodemanager.docker-container-executor.exec-name</name>
<value>/usr/bin/docker</value>
</property>
<property>
<name>yarn.nodemanager.container-executor.class</name>
<value>org.apache.hadoop.yarn.server.nodemanager.DockerContainerExecutor</value>
</property>
-->
</configuration>
6. 启动验证:
- 格式化namenode:hdfs namenode -format
- 在namenode上面启动hadoop集群:start-all.sh;
- 在namenode执行jps命令可以看到:
- 在datanode执行jps命令,可以看到:
常用配置文件:
- hadoop-env.sh:记录脚本要用的环境变量。
- core-site.xml:Hadoop核心配置项
- hdfs-site.xml:Hadoop守护进程配置项,例如namenode,secondarynamenode和datanode等。
- mapred-site.xml:MapReduce守护进程配置项,包括jobtracker和tasktracker。
- master:运行secondarynamenode(而不是namenode)的机器列表(每行一个)。只在namenode或jobtracker节点上使用,无需同步到各节点。
- slave:运行datanode和tasktracker的机器列表(每行一个)。只在namenode或jobtracker节点上使用,无需同步到各节点。
1. 配置管理
hadoop支持为所有的节点采用同一套配置文件,这样管理会变得非常简单,不过这对于某些集群来说并不适合。例如在扩展集群时,如果新机器的硬件和现有机器不同,则需要为新机器创建一套新的配置文件,以充分利用新硬件资源。所以,非常推荐在每个节点保存一套配置文件,并由管理员完成这些配置文件的同步工作。hadoop提供了一个基本工具来进行同步配置,即rsync。
这种情况下,需要引入“机器类”的概念,为不同的机器类分别维护一套配置文件。不过hadoop并没有提供执行这个操作的工具,需要借助外部工具,例如Chef,Puppet,cfengine和bcfg2等。
2. 控制脚本
- start-dfs.sh:在本地节点启动namenode,在slave文件指定的每个节点启动datanode,在master文件指定的每个节点启动secondarynamenode
- start-mapred.sh:在本地节点启动jobtracker,在slave文件指定的每个节点启动tasktracker。
- start-all.sh:依次调用start-dfs.sh和start-mapred.sh
- stop-dfs.sh/stop-mapred.sh/stop-all.sh:前面的start脚本对应的关闭脚本。
- hadoop-daemon.sh:上述脚本调用它来执行启动和终止hadoop守护进程。如果用户需要从其他系统或自己编写脚本控制hadoop守护进程,可以调用它。
- hadoop-daemons.sh:用于在多个主机上启动同一hadoop守护进程。
3. 守护进程管理
对于小型集群(几十个节点),可以将namenode、secondarynamenode、jobtracker放到单独一台机器上,但对于大型集群,最好分别放到不同的机器上。
- namenode:在内存中保存整个命名空间的所有文件和块元数据,它的内存需求很大。
- secondnamenode:保存一份最新的检查点,记录文件系统的元数据,有助于在数据丢失或系统崩溃时恢复namenode的元数据;它在大多时候空闲,但它创建检查时的内存需求和namenode差不多。一旦文件系统包含大量文件,单台主机可能无法同时运行namenode和secondarynamenode。
- jobtracker:在一个运行大量mapreduce作业的高负载集群上,jobtracker会使用大量内存和CPU资源,因此它最好运行在一个专用节点上。
浏览文件夹:hadoop fs -ls hdfs://192.168.1.201:9000/
创建文件夹:hadoop fs -mkdir hdfs://192.168.1.201:9000/testfolder
拷贝文件到hadoop:hadoop fs -copyFromLocal ./xxxx hdfs://192.168.1.201:9000/testfolder
创建文件夹:hadoop fs -mkdir hdfs://192.168.1.201:9000/testfolder
拷贝文件到hadoop:hadoop fs -copyFromLocal ./xxxx hdfs://192.168.1.201:9000/testfolder
如果想要看mapreduce跑的历史记录,请打开history server: mr-jobhistory-daemon.sh start historyserver