大数据分析入门-Hadoop伪分布式搭建(hadoop-2.7.7)

1 准备环境

操作系统要求:

centos 7.6

jdk-1.8

hadoop 部署方式:

(1)独立模式:又称为单机模式,在该模式下,无需运行任何守护进程,所有的程序都在单个JVM上执行。独立模式下调试Hadoop集群的MapReduce程序非常方便,所以一般情况下,该模式在学习或者开发阶段调试使用。

(2)伪分布式模式:Hadoop程序的守护进程运行在一台节点上,通常使用伪分布式模式用来调试Hadoop分布式程序的代码,以及程序执行是否正确,伪分布式模式是完全分布式模式的一个特例。

(3)完全分布式模式:Hadoop的守护进程分别运行在由多个主机搭建的集群上,不同节点担任不同的角色,在实际工作应用开发中,通常使用该模式构建企业级Hadoop系统。

本文使用伪分布式模式部署。

hadoop-2.7.7

2 伪分布式搭建

2.1 创建hadoop账户

1、创建一个名为hadoop的用户,useradd命令的-m用来指定用户名,-s用来指定用户登录时所需的shell文件:

# root 下执行
useradd -m hadoop -s /bin/bash
# 设置hadoop密码(Ha!@#123)
passwd hadoop

2.2 配置SSH,并设置无密码登录

根据Hadoop分布式系统的特性,在任务计划分发、心跳监测、任务管理、多租户管理等功能上,需要通过SSH(Secure Shell)进行通讯,所以必须安装配置SSH。另因为Hadoop没有提供SSH输入密码登录的形式,因此需要将所有机器配置为NameNode可以无密码登录的状态。

1、安装ssh服务

因系统安装时已部署ssh服务。所以无需安装部署。

ssh服务管理相关:

# ssh 安装
yum install openssh-server
# ssh 状态检查
systemctl status sshd
# ssh 服务重启
systemctl restart sshd
# ssh 服务关闭
systemctl stop sshd
# ssh 服务启动
systemctl start sshd

完成后连接本地SSH(测试ssh服务)

ssh hadoop@localhost

按提示输入yes,再输入hadoop用户的密码,完成登录。(该步骤在新安装主机产生~.ssh目录,方便hadoop用户免密配置)

2、设置无密码登录

a)hadoop用户进入SSH对应目录下,该目录包含了几乎所有当前用户SSH配置认证相关的文件:

cd ~/.ssh/

b)输入生成SSH私钥与公钥的命令,-t用于声明密钥的加密类型,输入Hadoop密码。这一步会提醒设置SSH密码,输入密码时直接回车就表示无密码,第二次输入密码回车确定,最后一次提交:

ssh-keygen -t rsa

第一次输入:enter(回车) 确认密钥存储的路径

第二次输入:enter(回车)

第三次输入:enter(回车)

生成如下文件:

c)将生成的SSH的公钥加入目标机器的SSH目录下,这里采用cat命令与>>,cat file1>>file2的含义为将file1内容append到file2中。

首次使用authorized_keys该文件时,请使用cp命令

cp id_rsa.pub authorized_keys

authorized_keys文件已存在时,再次增加时

cat ./id_rsa.pub >> ./authorized_keys

 2.3 安装Java并配置环境变量

a)部署java

方式一(不推荐,配置JAVA_HOME参数时容易找不到目录):

yum install # 网上查询下

方式二(推荐):

1、检查Open JDK是否存在,若存在则卸载

rpm -qa|grep java

# 卸载openjdk包
yum remove -y java

rpm -qa|grep java|grep openjdk|xargs rpm -e

2、新建jdk目录上传并解压。

mkdir -p /root/software 	#目录不固定,可以使用/usr/local目录

# jdk 压缩包放/root/software 下
cp jdk*.tar.gz /root/software
cd /root/software

# 解压
tar -zxvf jdk*.tar.gz

3、建立环境变量

vim /etc/profile 在最后一行加入环境变量

# 系统环境变量配置
export JAVA_HOME=/root/software/jdk1.8.0_151/	#目录不固定,可以使用/usr/local目录
export PATH=$JAVA_HOME/bin:$PATH
# 使配置文件生效
source /etc/profile

export JAVA_HOME=/root/software/jdk1.8.0_151 #目录不固定
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

2.4 下载编译好的hadoop,配置hadoop的环境

a)下载并解压

下载地址:

Index of /dist/hadoop/common/hadoop-2.7.7

1.浏览器中输入https://archive.apache.org/dist/hadoop/common/hadoop-2.7.7/,下载hadoop应用。选择已编译好的版本hadoop-2.7.7.tar.gz,因为该版本可以直接解压使用,更为方便。

2.上传并解压

# 进入上传目录
cd /root/software/
# 解压hadoop包
tar xzvf hadoop-2.7.7.tar.gz

 3.进入刚刚解压后存放的目录下:

cd /root/software/hadoop-2.7.7

4.将该文件夹的名字重命名为hadoop或软连接,屏蔽掉版本号的信息,使得后续命令行输入更为简便:

# 方法一:重命名
mv ./hadoop-2.7.7/ ./hadoop
# 方法二:软连接 (推荐,方便查看hadoop版本信息)
ln -s ./hadoop-2.7.7/ ./hadoop

b)配置环境

1.将已重命名的该文件夹的拥有者,指定给用户hadoop,缺少这一步,将导致后续操作特别是运行Hadoop时,反复因权限不足而停止:

chown -R hadoop ./hadoop

注:

上层目录需要有x权限,本文中目录在root目录下。所以需要对/root目录添加x权限,如果非root目录,其他共有目录 如:/usr/这类,可以不用添加该权限。

chmod -R a+x /root

2.编辑环境变量文件

系统hadoop环境变量配置

# 编辑系统配置文件
vi /etc/profile
# 使配置文件生效
source /etc/profile
# 命令校验 shell 命令下
hadoop

hadoop实际运行时环境变量配置

# 进入hadoop软件配置目录
cd $HADOOP_HOME/hadoop/etc/hadoop
# 编辑环境配置文件
vim hadoop-env.sh
# 添加如下配置
export JAVA_HOME=/root/software/jdk1.8.0_151/
export HADOOP_CONF_DIR=/root/software/hadoop/etc/hadoop/
# 使配置文件生效
source hadoop-env.sh

3.hadoop框架搭建完成,可以通过调用版本号进行测试hadoop是否可用

cd $HADOOP_HOME
./bin/hadoop version

正确搭建应该能看到hadoop的版本号等信息:

2.5 配置四个文件

对于Hadoop而言,可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode。设置Hadoop参数的主要方式是配置一系列由Hadoop守护进程和客户端读取的配置文件,如之前提及的hadoop-env.sh,还包括core-site.xml、hdfs-site.xml、mapred-site.xml、log4j.properties、taskcontroller.cfg等,伪分布式需要修改四个文件,修改的顺序没有特殊要求,以下进行逐一介绍。

此时需要在hadoop文件夹下的hadoop文件中

绝对路径是cd $HADOOP_HOME/etc/hadoop

配置Hadoop的主要5个文件

序号配置文件名配置对象主要内容
1hadoop-env.shhadoop运行环境用来定义hadoop运行环境相关的配置信息
2core-site.xml集群全局参数用于定义系统级别的参数,如HDFS URL 、Hadoop的临时目录等
3hdfs-site.xmlHDFS如名称节点和数据节点的存放位置、文件副本的个数、文件的读取权限等
4mapred-site.xmlMapreduce包括JobHistory Server 和应用程序参数两部分,如reduce任务的默认个数、任务所能够使用内存的默认上下限等
5yarn-site.xml集群资源管理系统参数配置ResourceManager ,nodeManager的通信端口,web监控端口等

2.5.1 core-site.xml

Core-site.xml 配置Common组件的属性

修改配置部分:

# 修改配置文件
vi $HADOOP_HOME/etc/hadoop/
# 替换内容如下
<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/root/software/hadoop/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

修改配置说明:

第一个属性表示Hadoop重要临时文件的存放目录,指定后需将使用到的所有子级文件夹都要手动创建出来,否则无法正常启动服务;第二个被官方称之为默认系统文件的名称(the name of the default file system),实际上决定了文件系统的主机号、端口号,对于伪分布式模型来说,其主机地址为localhost。

注意: 如需修改其他配置,参考实例如下

Core-site.xml配置实例(仅参考)

DN节点以及NN节点,snn节点配置一至

<property>

      <name>fs.default.name</name>          //配置NN节点地址和端口号

      <value>hdfs://hadoop.master:9000</value> //注意格式必须是host:port的形式

</property>

<property>

      <name>hadoop.tmp.dir</name>          //hadoop临时目录用来存放nn临时文件

      <value>/usr/local/hadoop/tmp</value>     //该目录必须预先手工创建不能删除

</property>

<property>

      <name>fs.checkpoint.period</name>     //snn检查nn日志的时间周期

       <value>60</value>                  //单位是秒,正式环境上建议配置成12小时

</property>

<property>

       <name>fs.checkpoint.size</name>     //snn每次从nn上读取的数据大小

       <value>67108864</value>           //通常情况下默认值就可以

</property>

 2.5.2 hdfs-site.xml

增加hdfs配置信息(namenode、datanode端口和目录位置)hdfs-site.xml文件中包含的信息,如复制数据的值,名称节点的路径,本地文件系统的数据节点的路径。

dfs.namenode.rpc-bind-host 参数说明:监听地址,监听地址默认为127.0.0.1,0.0.0.0为所有地址都可以访问端口。

修改配置部分:

<configuration>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/root/software/hadoop/tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/root/software/hadoop/tmp/dfs/data</value>
        </property>
        <property>
                <name>dfs.namenode.rpc-bind-host</name>
                <value>0.0.0.0</value>
        </property>
</configuration>

hdfs-site.xml 详解 (仅参考)

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <!--HDFS超级用户 -->
    <property>
        <name>dfs.permissions.superusergroup</name>
        <value>hadoop</value>
    </property>
 
    <!--开启web hdfs -->
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/home/hadoop/data/dfs/name</value>
        <description> namenode 存放name table(fsimage)本地目录(需要修改)</description>
    </property>
    <property>
        <name>dfs.namenode.edits.dir</name>
        <value>${dfs.namenode.name.dir}</value>
        <description>namenode粗放 transaction file(edits)本地目录(需要修改)</description>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/home/hadoop/data/dfs/data</value>
        <description>datanode存放block本地目录(需要修改)</description>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!-- 块大小128M (默认128M) -->
    <property>
        <name>dfs.blocksize</name>
        <value>134217728</value>
    </property>
    <!--======================================================================= -->
    <!--HDFS高可用配置 -->
    <!--指定hdfs的nameservice为ruozeclusterg7,需要和core-site.xml中的保持一致 -->
    <property>
        <name>dfs.nameservices</name>
        <value>ruozeclusterg7</value>
    </property>
    <property>
        <!--设置NameNode IDs 此版本最大只支持两个NameNode -->
        <name>dfs.ha.namenodes.ruozeclusterg7</name>
        <value>nn1,nn2</value>
    </property>
 
    <!-- Hdfs HA: dfs.namenode.rpc-address.[nameservice ID] rpc 通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.ruozeclusterg7.nn1</name>
        <value>ruozedata001:8020</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.ruozeclusterg7.nn2</name>
        <value>ruozedata002:8020</value>
    </property>
 
    <!-- Hdfs HA: dfs.namenode.http-address.[nameservice ID] http 通信地址 -->
    <property>
        <name>dfs.namenode.http-address.ruozeclusterg7.nn1</name>
        <value>ruozedata001:50070</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.ruozeclusterg7.nn2</name>
        <value>ruozedata002:50070</value>
    </property>
 
    <!--==================Namenode editlog同步 ============================================ -->
    <!--保证数据恢复 -->
    <property>
        <name>dfs.journalnode.http-address</name>
        <value>0.0.0.0:8480</value>
    </property>
    <property>
        <name>dfs.journalnode.rpc-address</name>
        <value>0.0.0.0:8485</value>
    </property>
    <property>
        <!--设置JournalNode服务器地址,QuorumJournalManager 用于存储editlog -->
        <!--格式:qjournal://<host1:port1>;<host2:port2>;<host3:port3>/<journalId> 端口同journalnode.rpc-address -->
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://ruozedata001:8485;ruozedata002:8485;ruozedata003:8485/ruozeclusterg7</value>
    </property>
 
    <property>
        <!--JournalNode存放数据地址 -->
        <name>dfs.journalnode.edits.dir</name>
        <value>/home/hadoop/data/dfs/jn</value>
    </property>
    <!--==================DataNode editlog同步 ============================================ -->
    <property>
        <!--DataNode,Client连接Namenode识别选择Active NameNode策略 -->
                             <!-- 配置失败自动切换实现方式 -->
        <name>dfs.client.failover.proxy.provider.ruozeclusterg7</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <!--==================Namenode fencing:=============================================== -->
    <!--Failover后防止停掉的Namenode启动,造成两个服务 -->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/hadoop/.ssh/id_rsa</value>
    </property>
    <property>
        <!--多少milliseconds 认为fencing失败 -->
        <name>dfs.ha.fencing.ssh.connect-timeout</name>
        <value>30000</value>
    </property>
 
    <!--==================NameNode auto failover base ZKFC and Zookeeper====================== -->
    <!--开启基于Zookeeper  -->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    <!--动态许可datanode连接namenode列表 -->
     <property>
       <name>dfs.hosts</name>
       <value>/home/hadoop/app/hadoop/etc/hadoop/slaves</value>
     </property>
</configuration>

2.5.3 mapred-site.xml

mapred-site.xml最重要的参数及其解释如下:

Hadoop2.X并没有像1.X提供mapred-site.xml文件,需要将样本文件复制为可使用的配置文件:

cp mapred-site.xml.template mapred-site.xml

这里使用yarn。yarn 是一种资源管理和作业调度技术,作为Hadoop 的核心组件之一,负责将系统资源分配给在 Hadoop 集群中运行的各种应用程序,并调度要在不同集群节点上执行的任务,其基本思想是将资源管理和作业调度/监视的功能分解为单独的 daemon,总体上yarn是 master/slave 结构,在整个资源管理框架中,ResourceManager 为 master,NodeManager 是 slaver。具体配置内容如下:

# 编辑配置文件
vi mapred-site.xml
# 修改配置部分
<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
</configuration>

mapred-site.xml最重要的参数及其解释如下:

NO.参数名默认值参数解释
1mapreduce.framework.namelocal取值local、classic或yarn其中之一,如果不是yarn,则不会使用yarn集群来实现资源的分配
2mapreduce.jobhistory.address0.0.0.0:10020定义历史服务器的地址和端口,通过历史服务器查看已经运行完的Mapreduce作业记录
3mapreduce.jobhistory.webapp.address0.0.0.0:19888定义历史服务器web应用访问的地址和端口

2.5.4 yarn-site.xml

配置yarn-site.xml文件,这里修改NodeManager上运行的附属服务即可:

# 编辑文件
vi yarn-site.xml
# 变更配置
<configuration>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>

yarn-site.xml 配置详解:(参考)

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <!-- nodemanager 配置 ================================================= -->
    <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.nodemanager.localizer.address</name>
        <value>0.0.0.0:23344</value>
        <description>Address where the localizer IPC is.</description>
    </property>
    <property>
        <name>yarn.nodemanager.webapp.address</name>
        <value>0.0.0.0:23999</value>
        <description>NM Webapp address.</description>
    </property>
 
    <!-- HA 配置 =============================================================== -->
    <!-- Resource Manager Configs -->
    <property>
        <name>yarn.resourcemanager.connect.retry-interval.ms</name>
        <value>2000</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    <!-- 使嵌入式自动故障转移。HA环境启动,与 ZKRMStateStore 配合 处理fencing -->
    <property>
        <name>yarn.resourcemanager.ha.automatic-failover.embedded</name>
        <value>true</value>
    </property>
    <!-- 集群名称,确保HA选举时对应的集群 -->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yarn-cluster</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
 
 
    <!--这里RM主备结点需要单独指定,(可选)
    <property>
         <name>yarn.resourcemanager.ha.id</name>
         <value>rm2</value>
     </property>
     -->
 
    <property>
        <name>yarn.resourcemanager.scheduler.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
    </property>
    <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>
        <value>5000</value>
    </property>
    <!-- ZKRMStateStore 配置 -->
    <property>
        <name>yarn.resourcemanager.store.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>ruozedata001:2181,ruozedata002:2181,ruozedata003:2181</value>
    </property>
    <property>
        <name>yarn.resourcemanager.zk.state-store.address</name>
        <value>ruozedata001:2181,ruozedata002:2181,ruozedata003:2181</value>
    </property>
    <!-- Client访问RM的RPC地址 (applications manager interface) -->
    <property>
        <name>yarn.resourcemanager.address.rm1</name>
        <value>ruozedata001:23140</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address.rm2</name>
        <value>ruozedata002:23140</value>
    </property>
    <!-- AM访问RM的RPC地址(scheduler interface) -->
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm1</name>
        <value>ruozedata001:23130</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm2</name>
        <value>ruozedata002:23130</value>
    </property>
    <!-- RM admin interface -->
    <property>
        <name>yarn.resourcemanager.admin.address.rm1</name>
        <value>ruozedata001:23141</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address.rm2</name>
        <value>ruozedata002:23141</value>
    </property>
    <!--NM访问RM的RPC端口 -->
    <property>
        <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
        <value>ruozedata001:23125</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
        <value>ruozedata002:23125</value>
    </property>
    <!-- RM web application 地址 -->
    <property>
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>ruozedata001:8088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>ruozedata002:8088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.https.address.rm1</name>
        <value>ruozedata001:23189</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.https.address.rm2</name>
        <value>ruozedata002:23189</value>
    </property>
 
 
 
    <property>
       <name>yarn.log-aggregation-enable</name>
       <value>true</value>
    </property>
    <property>
         <name>yarn.log.server.url</name>
         <value>http://ruozedata001:19888/jobhistory/logs</value>
    </property>
 
 
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>2048</value>
    </property>
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>1024</value>
        <discription>单个任务可申请最少内存,默认1024MB</discription>
     </property>
 
  
  <property>
    <name>yarn.scheduler.maximum-allocation-mb</name>
    <value>2048</value>
    <discription>单个任务可申请最大内存,默认8192MB</discription>
  </property>
 
   <property>
       <name>yarn.nodemanager.resource.cpu-vcores</name>
       <value>2</value>
    </property>
 
</configuration>

2.6 格式化后启动、调用实例、停止所有运行的hadoop进程

2.6.1 格式化并启动

1.更改配置并保存后,格式化HDFS的NameNode,在这一步之前,如果hdfs-site.xml中dfs.namenode.name.dir属性指定的目录不存在,格式化命令会自动创建之;如果存在,请确保其权限设置正确,此时格式操作会清除其内部所有的数据并重新建立一个新的文件系统:

# 进入hadoop目录
cd $HADOOP_HOME
# 格式化文件系统
bin/hdfs namenode -format

伪分布式格式完成后输出如下:

虽然出现shutting down NameNode ,但格式化成功

2.然后启动全部进程:

# 进入HADOOP_HOME目录
cd $HADOOP_HOME
# 启动全部进程
start-all.sh

3.成功启动后,可以通过web浏览器访问http://localhost:50070,可以看到如下界面:

4.输入jps查看到六个进程,如果缺少某进程需要查询解决方法:

 

5.在HDFS中创建用户目录:

hdfs dfs -mkdir -p /user/root

6.创建input目录,用于输入数据:

hdfs dfs -mkdir input

7.将所需的xml配置文件复制到input中:

(需要注意路径)

hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml input

8.如果系统之前运行过hadoop,则需要删除output目录:

hdfs dfs -rm -r output

 这几步会出现很多的warning,不用在意。

2.6.2调用实例

1.运行实例,需要先进入hadoop的文件夹下

cd $HADOOP_HOME

 2.输入

hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount input output

结果如图

3.然后进入hadoop下面的bin

cd $HADOOP_HOME/bin

 4.查看运行结果

hdfs dfs –ls ./output
hdfs dfs -cat output/*

2.6.3 hadoop相关

a)Hdfs相关

格式化NameNode

第一次启动时执行该操作。

cd $HADOOP_HOME
bin/hdfs namenode -format

格式化NameNode,会产生新的clusterID,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。所以,格式NameNode时,一定要停止相关进程,删除data数据和log日志,然后再格式化NameNode。clusterID在如下目录中的VERSION文件里,可自行查看对比。

/opt/hadoop2.7/data/tmp/dfs/name/current/opt/hadoop2.7/data/tmp/dfs/data/current

启动NameNode 

cd $HADOOP_HOME
sbin/hadoop-daemon.sh start namenode

启动DataNode

cd $HADOOP_HOME
sbin/hadoop-daemon.sh start datanode

jps查看状态

jps
108881 NodeManager
108469 DataNode
108629 SecondaryNameNode
111844 Jps
108346 NameNode
108780 ResourceManager

Web界面查看

需要Linux关闭防火墙和相关安全增强控制(这里很重要)。

IP地址:50070

b)Yarn相关

启动ResourceManager

cd $HADOOP_HOME
sbin/yarn-daemon.sh start resourcemanager

启动NodeManager

cd $HADOOP_HOME
sbin/yarn-daemon.sh start nodemanager

Web界面查看

IP地址:8088/cluster

c)MapReduce相关

文件操作测试

创建一个测试文件目录

pwd/opt/inputfile
echo "hello word hadoop" > word.txt

HDFS文件系统上创建文件夹

cd $HADOOP_HOME
bin/hdfs dfs -mkdir -p /opt/upfile/input

上传文件

cd $HADOOP_HOME
bin/hdfs dfs -put /opt/inputfile/word.txt /opt/upfile/input

查看文件

cd $HADOOP_HOME
bin/hdfs dfs -ls /opt/upfile/input
bin/hdfs dfs -cat /opt/upfile/input/*

Web端查看文件

d)任务相关

执行作业

cd $HADOOP_HOME
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /opt/upfile/input /opt/upfile/output

查看分析结果

bin/hdfs dfs -cat /opt/upfile/output/*

删除分析结果

bin/hdfs dfs -rm -r /opt/upfile/output

e)hadoop集群相关

停止集群

stop-all.sh

 

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 1. 安装Java环境 首先,需要安装Java环境。可以通过以下命令安装: sudo apt-get update sudo apt-get install default-jdk 2. 下载Hadoop 在官网下载Hadoop压缩包,解压到指定目录下。例如: sudo tar -zxvf hadoop-2.7.7.tar.gz -C /usr/local/ sudo mv /usr/local/hadoop-2.7.7 /usr/local/hadoop 3. 配置Hadoop 进入Hadoop的安装目录,修改配置文件。例如: cd /usr/local/hadoop/etc/hadoop/ sudo nano hadoop-env.sh 将JAVA_HOME设置为Java环境的安装路径: export JAVA_HOME=/usr/lib/jvm/default-java 然后,修改core-site.xml文件: sudo nano core-site.xml 添加以下内容: <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:900</value> </property> </configuration> 接着,修改hdfs-site.xml文件: sudo nano hdfs-site.xml 添加以下内容: <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/usr/local/hadoop/hadoop_data/hdfs/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/usr/local/hadoop/hadoop_data/hdfs/datanode</value> </property> </configuration> 最后,修改mapred-site.xml.template文件: sudo nano mapred-site.xml.template 将文件名改为mapred-site.xml,并添加以下内容: <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> 4. 启动Hadoop 启动Hadoop,执行以下命令: cd /usr/local/hadoop/sbin/ sudo ./start-all.sh 5. 验证Hadoop 在浏览器中输入http://localhost:50070,可以看到Hadoop的Web界面。在终端中输入以下命令,可以验证Hadoop是否正常运行: hadoop fs -mkdir /test hadoop fs -ls / ### 回答2: Ubuntu是Linux操作系统的一种版本,而Hadoop是一种用于大数据处理的开源分布式系统。在Ubuntu上搭建Hadoop分布式,可以实现在单台计算机上模拟多台计算机的分布式环境,这样可以方便开发人员进行测试和开发。 以下是Ubuntu搭建Hadoop分布式的步骤: 1. 安装Java 首先,Ubuntu系统需要安装Java。Hadoop需要Java支持,因此需要在Ubuntu系统上安装Java运行环境。 2. 下载HadoopHadoop官方网站上下载最新版本的Hadoop,保存到Ubuntu系统中。 3. 解压Hadoop文件 在Ubuntu系统中打开终端,进入Hadoop文件所在的目录,运行以下命令: tar -zxvf hadoop-x.x.x.tar.gz 其中“x.x.x”代表Hadoop版本号。 解压后会生成一个目录,将该目录改名为“hadoop”。 4. 配置Hadoop环境变量 在终端中打开/etc/environment文件,添加以下两行,表示设置JAVA_HOME和HADOOP_HOME环境变量: export JAVA_HOME=/usr/lib/jvm/java-version(该行需要根据实际情况修改) export HADOOP_HOME=/usr/local/hadoop 保存并退出。 在终端中打开~/.bashrc文件,添加以下两行: export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop 保存并退出,并在终端中运行以下命令,让环境变量生效: source ~/.bashrc 5. 修改Hadoop配置文件 在hadoop目录下,进入etc/hadoop目录,修改以下配置文件: (1)将core-site.xml文件中的以下内容修改为: <configuration> <property> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property> </configuration> (2)将hdfs-site.xml文件中的以下内容修改为: <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/hadoop_data/hdfs/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/hadoop_data/hdfs/datanode</value> </property> </configuration> (3)将mapred-site.xml文件中的以下内容修改为: <configuration> <property> <name>mapred.job.tracker</name> <value>localhost:9001</value> </property> </configuration> (4)将yarn-site.xml文件中的以下内容修改为: <configuration> <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> </configuration> 6. 格式化Hadoop文件系统 在终端中进入hadoop目录,运行以下命令: bin/hdfs namenode -format 该命令将格式化Hadoop文件系统,生成namenode和datanode。 7. 启动Hadoop 在终端中进入hadoop目录,运行以下命令: sbin/start-all.sh 该命令将启动Hadoop集群。 8. 测试Hadoop 在终端中运行以下命令: bin/hadoop dfs -mkdir /test 该命令将在Hadoop文件系统中创建一个文件夹。 运行以下命令: bin/hadoop dfs -ls / 该命令将列出Hadoop文件系统中的所有文件夹。 如果以上命令都能正常执行,表示已经成功在Ubuntu系统上搭建Hadoop分布式环境。 ### 回答3: Ubuntu是一个基于Linux操作系统的开源软件,供用户免费使用。Hadoop是一个Apache软件基金会的分布式存储及计算系统,用于大数据处理和分析。本文将针对使用Ubuntu搭建Hadoop分布式进行详细介绍。 一、安装Java 由于Hadoop是基于Java开发的,因此需要安装Java环境。使用以下命令安装: sudo apt-get update sudo apt-get install default-jdk 安装完成后,使用"java -version"和"javac -version"来检查是否成功安装Java。 二、准备安装Hadoop 首先,我们要先从Apache的官网下载所需的Hadoop版本,并解压。将解压后的文件夹复制到指定的目录,例如/home/hadoop/hadoop-2.8.0。 三、配置Hadoop 1. 配置hadoop-env.sh 使用以下命令打开hadoop-env.sh文件: cd $HADOOP_HOME/etc/hadoop sudo nano hadoop-env.sh 在文件末尾添加以下内容,设置JAVA_HOME为系统中Java的路径: export JAVA_HOME=/usr/lib/jvm/default-java 2. 配置core-site.xml core-site.xml为Hadoop的核心配置文件,可以设置与文件系统和网络有关的参数。使用以下命令打开core-site.xml: sudo nano core-site.xml 在文件中添加以下内容: <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration> 3. 配置hdfs-site.xml hdfs-site.xml为Hadoop文件系统配置文件,可以设置文件系统的相关参数。使用以下命令打开hdfs-site.xml: sudo nano hdfs-site.xml 在文件中添加以下内容: <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/hadoop/data/dfs/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/hadoop/data/dfs/datanode</value> </property> </configuration> 其中dfs.replication设置文件的副本数,dfs.namenode.name.dir和dfs.datanode.data.dir为数据存储目录。 四、启动Hadoop 使用以下命令启动Hadoop分布式模式: hadoop namenode -format start-all.sh 其中"start-all.sh"为启动所有Hadoop服务的脚本。使用命令jps来检查所有服务是否已经启动。若成功启动,则可在"localhost:50070"上查看Hadoop的Web UI界面。 五、运行Hadoop任务 在Hadoop分布式模式下,可使用以下命令运行Hadoop任务: hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.0.jar grep input output 'dfs[a-z.]+' 以上为基础的Hadoop分布式模式配置和运行,用户可以根据自身需求,对Hadoop进行更详细的配置和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值