hadoop安装

Hadoop是一个开源的Apache项目,允许对大规模,分布于不同网络的数据集进行并行处理

它由HDFS(hadoop distibuted file system )和hadoop YARN组成

HDFS:处理不同的节点上的大量数据

hadoop YARN :任务调度框架,调度所有节点上的数据处理

ubuntu 14.4   hadoop 2.8.5

单机设置

安装java 

下载地址

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

jdk-8u191-linux-x64.tar.gz

解压到目标文件

tar -zxvf jdk-8u191-linux-x64.tar.gz -C /usr/java/

配置环境变量

vim /etc/profile 

文末添加 

  • JAVA_HOME=/usr/java/jdk1.8.0_161/
  • CLASSPATH=$JAVA_HOME/lib/
  • PATH=$PATH:$JAVA_HOME/bin
  • export PATH JAVA_HOME CLASSPATH

使环境变量生效

source /etc/profile

下载Hadoop

https://hadoop.apache.org/releases.html

binary形式

 使用SHA-256方式验证我们下载的压缩包没有被篡改。,运行以下命令:

shasum -a 256 hadoop-2.8.5.tar.gz

出现结果

F9C726DF 693CE2DA A4107886 F603270D 66E7257F 77A92C98 86502D6C D4A884A4 hadoop-2.8.5.tar.gz

将出现的结果同下载页面的checksum中对应的SHA256的值做对比,忽略空格和大小写,一致则说明没被修改

然后解压

tar -zxvf hadoop-2.8.5.tar.gz 

移动

mv hadoop-2.8.5  /usr/local/hadoop 

修改环境变量

/usr/local/hadoop/etc/hadoop/hadoop-env.sh

将JAVA_HOME改为之前设置的值

运行 /usr/local/hadoop/bin/hadoop ,就可以看到hadoop的使用说明

测试

运行自带的Mapreduce项目,创建一个input目录,然后复制hadoop的配置文件到input目录,将这些文件作为数据

mkdir ~/input

cp /usr/local/hadoop/etc/hadoop/*.xml ~/input

/usr/local/hadoop/bin/hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar grep ~/input ~/grep_example 'principal[.]*'

我们使用上述语句运行mapreduce的hadoop-mapreduce-examples 项目中的grep项目,以~/input作为输入目录,~/grep_example作为输出目录。这个grep项目将会计算匹配的迭代单词或常规表达。最终,我们使用一个常规表达来统计其中的principal的出现次数在里面或者结尾的声明语句中,这个表达式是大小敏感的,所以如果出现在句子的开头被大写了,将不会被统计。

查看统计结果

cat ~/grep_example/* 

6       principal
1       principal.

hadoop 集群设置

一个master node对分布的文件系统有 索引和 调度资源分配的作用 ,node-master将会在该导文中担任这个角色,拥有两个守护进程:

NameNode:管理分布的文件系统   并 记录集群中数据块存储的地址

ResourceManager: 管理YARN作业,维护调度和在子节点上执行任务

Slave node存储具体数据,提供处理权限来运行作业,选取 node1,node2,它们也有两个守护进程

DataNode :管理节点上实际存储的数据,也叫NameNode

NodeMangager :管理节点上任务的执行

配置系统

在每个节点上创建host文件:

节点之间通过他们的名字交流,编辑 /etc/hosts 将三个节点的IP添加进去

192.0.2.1    node-master
192.0.2.2    node1
192.0.2.3    node2

添加认证key

master node通过ssh连接来连到其他节点管理它们

创建ssh-key :

ssh-keygen -b 4096

复制key到各个服务器(前提是保证个服务器上有hadoop用户,输入相应密码即可

ssh-copy-id -i $HOME/.ssh/id_rsa.pub hadoop@node-master
ssh-copy-id -i $HOME/.ssh/id_rsa.pub hadoop@node1
ssh-copy-id -i $HOME/.ssh/id_rsa.pub hadoop@node2

下载解压hadoop到/home/hadoop/hadoop

编辑/home/hadoop/.profile ,添加

PATH=/home/hadoop/hadoop/bin:/home/hadoop/hadoop/sbin:$PATH

node-master的配置就完成了,子节点照例配置

安装好java后,编辑/hadoop/etc/hadoop/hadoop-env.sh,设置 JAVA_HOME为Java的安装目录

export JAVA_HOME=${JAVA_HOME}

设置NameNode ,每个节点上的/hadoop/etc/hadoop/core-site.xml到node-master:9000

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
        <property>
            <name>fs.default.name</name>
            <value>hdfs://node-master:9000</value>
        </property>
    </configuration>

设置HDFS的路径,编辑 hadoop/etc/hadoop/hdfs-site.xml

<configuration>
    <property>
            <name>dfs.namenode.name.dir</name>
            <value>/home/hadoop/data/nameNode</value>
    </property>

    <property>
            <name>dfs.datanode.data.dir</name>
            <value>/home/hadoop/data/dataNode</value>
    </property>

    <property>
            <name>dfs.replication</name>
            <value>1</value>
    </property>
</configuration>

最后一个属性dfs.replication表示集群上每个节点上的数据的复制次数,该次数不应该大于实际子节点数,这里也可设置为2

设置YARN的作业计划

1.。将mapred-site.xml.template 重命名为 mapred-site.xml

cd ~/hadoop/etc/hadoop
mv mapred-site.xml.template mapred-site.xml

2.编辑 mapred-site.xml

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

设置YARN,编辑 yarn-site.xml

<configuration>
    <property>
            <name>yarn.acl.enable</name>
            <value>0</value>
    </property>

    <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>node-master</value>
    </property>

    <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
    </property>
</configuration>

配置slaves,编辑hadoop/etc/hadoop/slaves,内容为

node1

node2

配置内存分配

 默认的内存分配对于RAM小于8GB的机器的内存分配比较不友好,下面将提供一个2GB 的RAM的内存分配样例

内存分配特性

一个YARN作业运行需要两种资源:

一个Application Master(AM) :负责管理应用  和  协调集群上分布的执行器

一些执行器 :由AM创建来实际运行作业 , 对于MapReduce类型的作业,他们将并行的执行 map或reduce操作

这两者都运行在子节点上的container中,每个子节点都运行着一个NodeManager 守护进程,负责container的创建。

主节点上的ResourceManager管理着集群上的所有节点的container分配,根据吞吐量需求和当前情况。

要保证集群的正常运行 ,有四种资源需要被合适的分配:

1.单个节点上的container应被分配的内存         ,要比其他三种大,比整个RAM小,否者container分配将被驳回,应用将失败 。configured in yarn-site.xml with yarn.nodemanager.resource.memory-mb

2.单个节点的的container允许消耗的最大与最小内存    ,如果一个container消耗的大于最大值将会使分配失败,并将永远被分配为最小值的倍数。configured in yarn-site.xml with yarn.scheduler.maximum-allocation-mb 和 yarn.scheduler.minimum-allocation-mb

3.ApplicationMaster应该被分配多少内存, 这是一个恒定值,应与container的最大允许值相适应。configured in mapred-site.xml with yarn.app.mapreduce.am.resource.mb

4.每个map与reduce操作应被分配多少内存,     应该小于container的最大值 。configured in mapred-site.xml with properties mapreduce.map.memory.mband mapreduce.reduce.memory.mb

2GB的RAM的配置样例 

PropertyValue
yarn.nodemanager.resource.memory-mb 1536
yarn.scheduler.maximum-allocation-mb 1536
yarn.scheduler.minimum-allocation-mb 128
yarn.app.mapreduce.am.resource.mb 512
mapreduce.map.memory.mb 256
mapreduce.reduce.memory.mb 256

编辑yarn-site.xml ,添加如下内容

<property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>1536</value>
</property>

<property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>1536</value>
</property>

<property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>128</value>
</property>

<property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
</property>

最后一个属性 yarn.nodemanager.vmem-check-enabled ,禁用虚拟内存,能防止在JDK8上的container分配。

编辑mapred-site.xml ,添加 如下内容

<property>
        <name>yarn.app.mapreduce.am.resource.mb</name>
        <value>512</value>
</property>

<property>
        <name>mapreduce.map.memory.mb</name>
        <value>256</value>
</property>

<property>
        <name>mapreduce.reduce.memory.mb</name>
        <value>256</value>
</property>

复制master上的配置文件到子节点上(子节点之前的操作是 复制master上的hadoop压缩包,解压)

scp ~/hadoop/etc/hadoop/* hadoop@node1:/home/hadoop/hadoop/etc/hadoop/etc/hadoop/

像其他典型的文件系统一样 HDFS需要被格式化,在master节点上

~/hadoop/bin/hdfs namenode -format 

运行HDFS

~/hadoop/sbin/start-dfs.sh

 查看启动的进程

$JAVA_HOME/bin/jps

正常情况下,node-master上应有 nodename , jps, secondarynodename  , ; node1,node2 上应有 datanode ,jps . 

通过日志,看到启动namenode时遇到绑定IP失败

遇到异常java.net.BindException: Problem binding to [hadoop21:8031] java.net.BindException,根据提示https://wiki.apache.org/hadoop/BindException

将site-core.xml中的node-master改为0.0.0.0,就ok了。

 

停止HDFS

~/hadoop/sbin/stop-dfs.sh

管理HDFS集群

~/hadoop/bin/hdfs dfsadmin -report  将会显示所有运行的DataNode信息

hdfs dfsadmin -help可以查看所有可用命令

或者在浏览器上输入 http://node-master-IP:50070 通过网页查看比较友好的管理控制台。

从HDFS中 放入与读取数据

创建supergroup目录,所有没有指定上级目录的操作都会以该目录作为上级目录

~/hadoop/bin/hdfs dfs -mkdir -p /user/hadoop

查看目录下的文件

~/hadoop/bin/hadoop fs -ls  /                      

可以查看根目录下的所有目录

创建目录books将自动在/user/hadoop/下创建

~/hadoop/bin/hdfs dfs -mkdir books 

将数据放入books中

~/hadoop/bin/hdfs dfs -put alice.txt holmes.txt frankenstein.txt books 

查看book目录中文件

~/hadoop/bin/hdfs dfs -ls books

将hdfs文件系统中的一个文件移动到本地文件系统

~/hadoop/bin/hdfs dfs -cat books/alice.txt 

更多的HDFS文件操作命令见:

 https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/FileSystemShell.html

集群中的一个服务器作为NameNode ,另一个服务器作为专门的资源管理器ResourceManager。这些是管理者,其他的服务器(例入web app代理服务器,mapreducce历史服务器)通常不是运行在专用的硬件上就是在共享的设备上,取决于上传和下载

集群上剩下的服务器同时作为DataNode和NodeManager

hadoop有两种典型的配置文件:

只读配置:core-default.xmlhdfs-default.xmlyarn-default.xml and mapred-default.xml

网站专用配置:etc/hadoop/core-site.xmletc/hadoop/hdfs-site.xmletc/hadoop/yarn-site.xml   etc/hadoop/mapred-site.xml

你可以通过设置分布的服务器上的 bin/目录下的etc/hadoop/hadoop-env.sh and etc/hadoop/yarn-env.sh来控制hadoop 脚本

要配置hadoop集群就要配置hadoop守护进行执行的环境变量和配置参数

HDFS守护进程有NameNode,SecondaryNameNode和DataNode. 

YARN的守护进程有ResourceManager, NodeManager 和WebAppProxy

如果要使用Mapreduce,那么MapReduce作业历史服务将启动,对于大型的安装,这些通常运行在不同的机器上。

配置hadoop守护进程的环境

管理员应该可以编辑 etc/hadoop/hadoop-env.sh 可选的 etc/hadoop/mapred-env.sh 和 etc/hadoop/yarn-env.sh 来个性化hadoop守护进程的环境

至少应该设置正确的JAVA_HOME

DaemonEnvironment Variable
NameNode HADOOP_NAMENODE_OPTS
DataNode HADOOP_DATANODE_OPTS
Secondary NameNode HADOOP_SECONDARYNAMENODE_OPTS
ResourceManager YARN_RESOURCEMANAGER_OPTS
NodeManager YARN_NODEMANAGER_OPTS
WebAppProxy YARN_PROXYSERVER_OPTS
Map Reduce Job History Server HADOOP_JOB_HISTORYSERVER_OPTS

例如让Namenode使用parallelGC,则需要在hadoop-env.sh中添加  export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC"

其他有用的配置参数为

HADOOP_PID_DIR   守护进程的进程id文件保存的目录

HADOOP_LOG_DIR  守护进程的日志文件保存的目录

HADOOP_HEAPSIZE/YARN_HEAPSIZE 允许最大存储量MB, 默认为1000即1000M

通常应该设置HADOOP_PID和HADOOP_LOG_DIR这样它们就只能被运行hadoop守护进行的用户修改,避免潜在的连接攻击。

HADOOP_PREFIX也应该设置在系统范围的环境变量中 /etc/profile :

HADOOP_PREFIX=/path/to/hadoop

export HADOOP_PREFIX

DaemonEnvironment Variable
ResourceManager YARN_RESOURCEMANAGER_HEAPSIZE
NodeManager YARN_NODEMANAGER_HEAPSIZE
WebAppProxy YARN_PROXYSERVER_HEAPSIZE
Map Reduce Job History Server HADOOP_JOB_HISTORYSERVER_HEAPSIZE

配置hadoop的守护进程

etc/hadoop/core-site.xml

ParameterValueNotes
fs.defaultFS NameNode URI hdfs://host:port/
io.file.buffer.size 131072 Size of read/write buffer used in SequenceFiles.

etc/hadoop/hdfs-site.xml配置NameNode

ParameterValueNotes
dfs.namenode.name.dir Path on the local filesystem where the NameNode stores the namespace and transactions logs persistently. If this is a comma-delimited list of directories then the name table is replicated in all of the directories, for redundancy.
dfs.hosts / dfs.hosts.exclude List of permitted/excluded DataNodes. If necessary, use these files to control the list of allowable datanodes.
dfs.blocksize 268435456 HDFS blocksize of 256MB for large file-systems.
dfs.namenode.handler.count 100 More NameNode server threads to handle RPCs from large number of DataNodes.

配置DataNode

ParameterValueNotes
dfs.datanode.data.dir Comma separated list of paths on the local filesystem of a DataNode where it should store its blocks. If this is a comma-delimited list of directories, then data will be stored in all named directories, typically on different devices.

etc/hadoop/yarnsite.xml

配置ResourceManager和NodeManager

ParameterValueNotes
yarn.acl.enable true / false Enable ACLs? Defaults to false.
yarn.admin.acl Admin ACL ACL to set admins on the cluster. ACLs are of for comma-separated-usersspacecomma-separated-groups. Defaults to special value of * which means anyone. Special value of just space means no one has access.
yarn.log-aggregation-enable false Configuration to enable or disable log aggregation

配置ResourceManager:





原文地址:https://www.cnblogs.com/Ting-light/p/9872403.html