欢迎投稿

今日深度:

hadoop,

hadoop,


hadoop是个老云计算技术了 是由apache开发的为了鄙视google的mapreduce跟GFS不开源而开发的 下面说一下2.7.1稳定版的新概念与安装

新的yarn框架跟老的MapReduce的架构最大的区别是JobTracker 和 TaskTracker 不见了,取而代之的是 ResourceManager、ApplicationMaster 与 NodeManager 三个部分。
ResourceManager 是一个中心的服务,它做的事情是调度、启动每一个 Job 所属的 ApplicationMaster、另外监控 ApplicationMaster 的存在情况。
ApplicationMaster 负责一个 Job 生命周期内的所有工作,类似老的框架中 JobTracker,每一个 Job都有一个 ApplicationMaster。

hadoop下载页面
http://hadoop.apache.org/releases.html
下载2.7.1稳定版,点击binary倒转到镜像下载页下载hadoop
http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.1/hadoop-2.7.1.tar.gz

安装并运行hadoop需要2个条件
1、安装jdk,并配置.bashrc或/etc/profile(全局),设置JAVA_HOME等环境变量
jdk下载地址
http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html
我下载的是8u65版本jdk-8u65-linux-x64.tar.gz

export JAVA_HOME=/usr/local/java
export HADOOP_DEV_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=${HADOOP_DEV_HOME}
export HADOOP_COMMON_HOME=${HADOOP_DEV_HOME}
export HADOOP_HDFS_HOME=${HADOOP_DEV_HOME}
export YARN_HOME=${HADOOP_DEV_HOME}
export HADOOP_CONF_DIR=${HADOOP_DEV_HOME}/etc/hadoop
export HDFS_CONF_DIR=${HADOOP_DEV_HOME}/etc/hadoop
export YARN_CONF_DIR=${HADOOP_DEV_HOME}/etc/hadoop
export HADOOP_LOG_DIR=${HADOOP_DEV_HOME}/logs
export PATH=${HADOOP_DEV_HOME}/bin:$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib:$CLASSPATH

source ~/.bashrc或/etc/profile(全局)
由于在.bashrc或/etc/profile(全局)里面配置了JAVA_HOME等环境变量,所以yarn-env.sh,hadoop-env.sh都不需要修改
2、保证DataNode服务器之间可以ssh免密码登陆(第一次需要输入密码)

安装过程如下:
把解压缩文件放到/usr/local/hadoop下

vim /etc/hosts

127.0.0.1 localhost 加上hostname命令显示的值
10.211.55.4 hadoop-master
10.211.55.5 hadoop-slave-1
10.211.55.6 hadoop-slave-2

如果host不映射hostname的话
执行hadoop namenode -format格式化ndfs时会报如下错误

指定三台机器

vim /usr/local/hadoop/etc/hadoop/slaves
hadoop-slave-1
hadoop-slave-2

三台都为DataNode
127.0.0.1为NameNode
10.211.55.5为SecondaryNameNode
10.211.55.6为JobHistoryServer和ResourceManager

2.x版本的hadoop配置文件全部在etc目录下
新hadoop的yarn框架需要更改5个xml文件,分别为hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、Yarn-site.xml

1、hadoop环境配置
vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh
把export JAVA_HOME=${JAVA_HOME}改成绝对路径export JAVA_HOME=/usr/local/java
否则会报错

2、NameNode节点配置
vim /usr/local/hadoop/etc/hadoop/core-site.xml
一般默认都是9000端口,但是我自己的ubuntu并不能正常运行,所以才修改为8020。8020端口是hadoop的namenode的RPC调用端口。

<configuration>
        <property>
                <name>fs.default.name</name>
                <value>hdfs://hadoop_master:8020</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/usr/local/hadoop/tmp</value>
                <description>A base for other temporary directories.</description>
        </property>
</configuration>

3、hdfs配置
vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml

dfs.replication决定文件备份数量 少于三个的备份,可能会影响到数据的可靠性,太多会造成冗余过多,所以生产环境建议为3
dfs.federation.nameservices 指定NameNote的别名 2.X的版本支持分布式NameNode
dfs.namenode.http-address 为每个 NameNode 设置对外的 HTTP 地址
dfs.namenode.rpc-address 为每个 NameNode 设置 RPC 通信地址

<configuration>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>/usr/local/hadoop/name_dir</value>
            <description>Determines where on the local filesystem the DFS name node
              should store the name table.  If this is a comma-delimited list
              of directories then the name table is replicated in all of the
              directories, for redundancy. 
             </description>
         </property>
          <property>
            <name>dfs.federation.nameservices</name>
            <value>ns1,ns2</value>
          </property>
          <property>
            <name>dfs.namenode.rpc-address.ns1</name>
            <value>hadoop-slave-1:9001</value>
          </property>
          <property>
            <name>dfs.namenode.http-address.ns1</name>
            <value>hadoop-slave-1:23001</value>
          </property>   
          <property>
            <name>dfs.namenode.rpc-address.ns2</name>
            <value>hadoop-slave-2:9001</value>
          </property>
          <property>
            <name>dfs.namenode.http-address.ns2</name>
            <value>hadoop-slave-2:23001</value>
          </property>
</configuration>

4、mapreduce配置

cd /usr/local/hadoop/etc/hadoop/
cp -p mapred-site.xml.template mapred-site.xml
vim /usr/local/hadoop/etc/hadoop/mapred-site.xml

指定mapreduce框架为yarn

 <configuration>
      <property>
          <name>mapreduce.framework.name</name>
          <value>yarn</value>
      </property>
</configuration>

如果没有配置这项,那么提交的 Yarn job 只会运行在 locale 模式,而不是分布式模式

5、Yarn配置
vim /usr/local/hadoop/etc/hadoop/yarn-site.xml

yarn.resourcemanager.resource-tracker.address:
新框架中 NodeManager 需要向 RM 报告任务运行状态供 Resouce 跟踪,因此 NodeManager 节点主机需要知道 RM 主机的 tracker 接口地址
yarn.resourcemanager.address:
新框架中 NodeManager 与 RM 通信的接口地址
yarn.resourcemanager.scheduler.address:
NodeManger 需要知道 RM 主机的 scheduler 调度服务接口地址
yarn.resourcemanager.webapp.address:
新框架中各个 task 的资源调度及运行状况通过通过该 web 界面访问

<configuration>
    <property>
        <description>The address of the resource tracker interface.</description>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>hadoop-slave-3:8025</value>
    </property>
    <property>
        <description>
            The address of the applications manager interface in the RM.
        </description>
        <name>yarn.resourcemanager.address</name>
        <value>hadoop-slave-3:8040</value>
     </property>
    <property>
        <description>The address of the scheduler interface.</description>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>hadoop-slave-3:8030</value>
     </property>
     <property>
        <description>The address of the RM web application.</description>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>hadoop-slave-3:8088</value>
      </property>
      <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce.shuffle</value>
      </property>
</configuration>

在10.211.55.4上执行

hadoop namenode -format

显示如下则格式化ndfs成功

/usr/local/hadoop/sbin/start-all.sh

输入密码

javac查看是否启动成功
显示如下则表示运行成功

如果嫌写mapreduce麻烦的话可以用hive 直接写sql
如果嫌mapreduce慢的话可以hbase或者spark(最近很火)hadoop生态圈技术更新太快 1年一个样。。。

配置的各个属性和默认信息查询:
http://hadoop.apache.org/docs/stable/

core-default.xml
hdfs-default.xml
mapred-default.xml
yarn-default.xml

以下为hadoop参数配置优化 转自http://blog.pureisle.net/archives/1956.html
hadoop.tmp.dir
默认值: /tmp
说明: 尽量手动配置这个选项,否则的话都默认存在了里系统的默认临时文件/tmp里。并且手动配置的时候,如果服务器是多磁盘的,每个磁盘都设置一个临时文件目录,这样便于mapreduce或者hdfs等使用的时候提高磁盘IO效率。

fs.trash.interval
默认值: 0
说明: 这个是开启hdfs文件删除自动转移到垃圾箱的选项,值为垃圾箱文件清除时间。一般开启这个会比较好,以防错误删除重要文件。单位是分钟。

fs.inmemory.size.mb
默认值:
说明: reduce阶段用户合并map输出的内存限制。这里设置200,可根据自身硬件设备进行更改测试。

io.sort.factor
默认值:10
说明:排序文件的时候一次同时最多可并流的个数,这里设置100。新版本为mapreduce.task.io.sort.factor。

io.sort.mb
默认值:100
说明: 排序内存使用限制,这里设置200m。新版本看说明貌似改成了这个mapreduce.task.io.sort.mb。

io.file.buffer.size
默认值:4096
说明:SequenceFiles在读写中可以使用的缓存大小,这里设置为131072。貌似这个参数在新版本里变为了:file.stream-buffer-size,单位bytes 。

dfs.blocksize
默认值:67108864
说明: 这个就是hdfs里一个文件块的大小了,默认64M,这里设置134217728,即128M,太大的话会有较少map同时计算,太小的话也浪费可用map个数资源,而且文件太小namenode就浪费内存多。根据需要进行设置。

dfs.namenode.handler.count
默认值:10
说明:hadoop系统里启动的任务线程数,这里改为40,同样可以尝试该值大小对效率的影响变化进行最合适的值的设定。

mapred.child.java.opts
默认值:-Xmx200m
说明:jvms启动的子线程可以使用的最大内存。改为-Xmx1024m,内存再大也可以继续增加。但是如果一般任务文件小,逻辑不复杂用不了那么多的话太大也浪费。

mapreduce.jobtracker.handler.count
默认值:10
说明:JobTracker可以启动的线程数,一般为tasktracker节点的4%。

mapreduce.reduce.shuffle.parallelcopies
默认值:5
说明:reuduce shuffle阶段并行传输数据的数量。这里改为10。集群大可以增大。

mapreduce.tasktracker.http.threads
默认值:40
说明:map和reduce是通过http进行数据传输的,这个是设置传输的并行线程数。

mapreduce.map.output.compress
默认值:false
说明: map输出是否进行压缩,如果压缩就会多耗cpu,但是减少传输时间,如果不压缩,就需要较多的传输带宽。配合mapreduce.map.output.compress.codec使用,默认是org.apache.hadoop.io.compress.DefaultCodec,可以根据需要设定数据压缩方式。

mapreduce.reduce.shuffle.merge.percent
默认值: 0.66
说明:reduce归并接收map的输出数据可占用的内存配置百分比。类似mapreduce.reduce.shuffle.input.buffer.percen属性。

mapreduce.reduce.shuffle.memory.limit.percent
默认值: 0.25
说明:一个单一的shuffle的最大内存使用限制。

www.htsjk.Com true http://www.htsjk.com/Hadoop/38201.html NewsArticle hadoop, hadoop是个老云计算技术了 是由apache开发的为了鄙视google的mapreduce跟GFS不开源而开发的 下面说一下2.7.1稳定版的新概念与安装 新的yarn框架跟老的MapReduce的架构最大的区别是JobTr...
相关文章
    暂无相关文章
评论暂时关闭