首页
学习
活动
专区
工具
TVP
发布
首页标签mapreduce

#mapreduce

Google 提出的一个软件架构,用于大规模数据集(大于1TB)的并行运算

mapreduce计算引擎任务分配?

mapreduce计算引擎任务资源规划?

Spark完全可以取代mapreduce吗?

请描述mapReduce中shuffle阶段的工作流程,如何优化shuffle阶段?

如何决定一个job的map和reduce的数量?

请描述mapReduce有几种排序及排序发生的阶段?

EatRice

腾云先锋 · 腾云先锋(TDP)成员 (已认证)

1)排序的分类: (1)部分排序: MapReduce根据输入记录的键对数据集排序。保证输出的每个文件内部排序。 (2)全排序: 如何用Hadoop产生一个全局排序的文件?最简单的方法是使用一个分区。但该方法在处理大型文件时效率极低,因为一台机器必须处理所有输出文件,从而完全丧失了MapReduce所提供的并行架构。 替代方案:首先创建一系列排好序的文件;其次,串联这些文件;最后,生成一个全局排序的文件。主要思路是使用一个分区来描述输出的全局排序。例如:可以为待分析文件创建3个分区,在第一分区中,记录的单词首字母a-g,第二分区记录单词首字母h-n, 第三分区记录单词首字母o-z。 (3)辅助排序:(GroupingComparator分组) Mapreduce框架在记录到达reducer之前按键对记录排序,但键所对应的值并没有被排序。甚至在不同的执行轮次中,这些值的排序也不固定,因为它们来自不同的map任务且这些map任务在不同轮次中完成时间各不相同。一般来说,大多数MapReduce程序会避免让reduce函数依赖于值的排序。但是,有时也需要通过特定的方法对键进行排序和分组等以实现对值的排序。 (4)二次排序: 在自定义排序过程中,如果compareTo中的判断条件为两个即为二次排序。 2)自定义排序WritableComparable bean对象实现WritableComparable接口重写compareTo方法,就可以实现排序 发生阶段有两个 (1)一个是在map side发生在spill后partition前。 (2)一个是在reduce side发生在copy后 reduce前。 ———————————————— 版权声明:本文为CSDN博主「小蚂蚁爱吃肉」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_38603049/article/details/102741572... 展开详请
1)排序的分类: (1)部分排序: MapReduce根据输入记录的键对数据集排序。保证输出的每个文件内部排序。 (2)全排序: 如何用Hadoop产生一个全局排序的文件?最简单的方法是使用一个分区。但该方法在处理大型文件时效率极低,因为一台机器必须处理所有输出文件,从而完全丧失了MapReduce所提供的并行架构。 替代方案:首先创建一系列排好序的文件;其次,串联这些文件;最后,生成一个全局排序的文件。主要思路是使用一个分区来描述输出的全局排序。例如:可以为待分析文件创建3个分区,在第一分区中,记录的单词首字母a-g,第二分区记录单词首字母h-n, 第三分区记录单词首字母o-z。 (3)辅助排序:(GroupingComparator分组) Mapreduce框架在记录到达reducer之前按键对记录排序,但键所对应的值并没有被排序。甚至在不同的执行轮次中,这些值的排序也不固定,因为它们来自不同的map任务且这些map任务在不同轮次中完成时间各不相同。一般来说,大多数MapReduce程序会避免让reduce函数依赖于值的排序。但是,有时也需要通过特定的方法对键进行排序和分组等以实现对值的排序。 (4)二次排序: 在自定义排序过程中,如果compareTo中的判断条件为两个即为二次排序。 2)自定义排序WritableComparable bean对象实现WritableComparable接口重写compareTo方法,就可以实现排序 发生阶段有两个 (1)一个是在map side发生在spill后partition前。 (2)一个是在reduce side发生在copy后 reduce前。 ———————————————— 版权声明:本文为CSDN博主「小蚂蚁爱吃肉」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_38603049/article/details/102741572

ReduceTask工作机制?

C++新手问题?

使用TBDS,出现NoClassDefFoundError?

hive mapreduce查询假死.?

如何搭建Hadoop处理环境?

asioc一个程序员
软件环境: 虚拟机:VMware Pro14 Linux:CentOS-6.4(下载地址,下载DVD版本即可) JDK:OpenJDK1.8.0 (强力建议不要使用 Oracle 公司的 Linux 版本的 JDK) Hadoop:2.6.5(下载地址) 虚拟机的安装和Linux系统的安装这里就省略了,可以参照网上的教程安装,一般没什么大问题,需要注意的是记住这里你输入的用户密码,下面还要用,如下图所示。 📷 设置用户密码.png 用户选择 使用虚拟机安装好系统后,可以看到登录界面,如下图所示。 📷 进入系统.png 选择 Other ,在 Username 输入框中输入 root,回车,再在 Password 输入框中输入你创建用户时密码。root 用户是安装 CentOS 自动创建的超级用户,但密码和你安装系统时创建的普通用户密码是一样的。 平时在使用 CentOS 时,并不推荐使用 root 用户,因为该用户具有整个系统的最高权限,使用该用户可能会导致严重的后果,但前提是你对 Linux 很熟,才会误操作。搭建 Hadoop 的大数据平台,使用普通用户,很多命令需要 sudo 命令来获取 root 用户的权限,比较麻烦,所以索性直接使用 root 用户。 安装SSH 集群、单节点模式都需要用到 SSH 登陆(类似于远程登陆,你可以登录某台 Linux 主机,并且在上面运行命令)。 首先确保你的 CentOS 系统可以正常的上网,你可以查看桌面右上角的网络图标,若显示红叉则表明未联网,可点击选择可用网络,也可以使用桌面左上角的火狐浏览器输入网址验证是否网络连接正常。如果还是无法上网,检查虚拟机的设置,选用 NAT 模式,或者上网百度解决。 📷 检查网络状况.png 确定网络连接正常后,打开 CentOS 的终端,可在 CentOS 的桌面点击鼠标右键,选择 Open In Terminal,如下图所示。 📷 打开终端.png 一般情况下,CentOS 默认已安装了 SSH client、SSH server,可打开终端执行如下命令进行检验: rpm -qa | grep ssh 如果返回的结果如下图所示,包含了 SSH client 跟 SSH server,则不需要再安装。 📷 查看SSH是否已安装.png 如果需要安装,则可以通过 yum 这个包管理器进行安装。(安装过程中会让你输入 [y/N],输入 y 即可) 注意:命令是单条执行的,不是直接把两条命令粘贴过去。 终端中的粘贴可通过鼠标点击右键选择 Paste 粘贴,也可通过快捷键 【Shift + Insert】粘贴。 yum install openssh-clients yum install openssh-server SSH安装完成后,执行如下命令测试一下 SSH 是否可用(SSH首次登陆提示 yes/no 信息,输入 yes 即可,然后按照提示输入 root 用户的密码,这样就登录到本机了),如下图所示。 📷 首次登录SSH.png 但这样登陆需要每次都输入密码,我们需要配置成SSH无密码登陆比较方便。 首先输入 exit 退出刚才的 ssh,就回到了我们原先的终端窗口,然后利用 ssh-keygen 生成密钥,并将密钥加入到授权中。 exit # 退出刚才的 ssh localhost cd ~/.ssh/ # 若提示没有该目录,请先执行一次ssh localhost ssh-keygen -t rsa # 会有提示,都按回车即可 cat id_rsa.pub >> authorized_keys # 加入授权 chmod 600 ./authorized_keys # 修改文件权限 此时再用 ssh localhost 命令,无需输入密码就可以直接登陆了,如下图所示。 📷 再次登录SSH.png 安装 Java 环境 Java 环境可选择 Oracle 的 JDK,或是 OpenJDK(可看作 JDK 的开源版本),现在一般 Linux 系统默认安装的基本是 OpenJDK,这里安装的是 OpenJDK1.8.0版本的。 有的 CentOS 6.4 默认安装了 OpenJDK 1.7,这里我们可以使用命令检查一下,和 Windows 下的命令一样,还可以查看 JAVA_HOME 这个环境变量的值。 java -version # 查看 java 的版本 javac -version # 查看编译命令 Javac 的版本 echo $JAVA_HOME # 查看 $JAVA_HOME 这个环境变量的值 如果系统没有安装 OpenJDK,我们可以通过 yum 包管理器来安装。(安装过程中会让输入 [y/N],输入 y 即可) yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel #安装 openjdk1.8.0 通过上述命令安装 OpenJDK,默认安装位置为 /usr/lib/jvm/java-1.8.0,下面配置 JAVA_HOME 时就使用这个位置。 接着需要配置一下 JAVA_HOME 环境变量,为了方便,直接在 ~/.bashrc 中进行设置,相当于配置的是 Windows 的用户环境变量,只对单个用户生效,当用户登录后,每次打开 shell 终端,.bashrc 文件都会被读取。 修改文件,可以直接使用 vim 编辑器打开文件,也可以使用类似于 Windows 记事本的 gedit 文本编辑器。 下面命令任选其一。 vim ~/.bashrc # 使用 vim 编辑器在终端中打开 .bashrc 文件 gedit ~/.bashrc # 使用 gedit 文本编辑器打开 .bashrc 文件 在文件最后面添加如下单独一行(指向 JDK 的安装位置),并保存。 📷 配置JAVA_HOME环境变量.png 接着还需要让该环境变量生效,执行如下命令。 source ~/.bashrc # 使变量设置生效 设置好后我们来检验一下是否设置正确,如下图所示。 echo $JAVA_HOME # 检验变量值 java -version javac -version $JAVA_HOME/bin/java -version # 与直接执行 java -version 一样 📷 检查JAVA_HOME环境变量是否配置正确.png 这样,Hadoop 所需的 Java 运行环境就安装好了。 安装 Hadoop 在前面软件环境已经给出了 hadoop2.6.5 的下载地址,可以直接通过火狐浏览器打开下载,默认下载位置是在用户的 Home 中的 Downloads 文件夹下,如下图所示。 📷 下载Hadoop.png 下载完成后,我们将 Hadoop 解压到 /usr/local/ 中。 tar -zxf ~/下载/hadoop-2.6.5.tar.gz -C /usr/local # 解压到/usr/local目录中 cd /usr/local/ # 切换当前目录为 /usr/local 目录 mv ./hadoop-2.6.5/ ./hadoop # 将文件夹名改为hadoop chown -R root:root ./hadoop # 修改文件权限,root 是当前用户名 Hadoop 解压后即可使用,输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息。 cd /usr/local/hadoop # 切换当前目录为 /usr/local/hadoop 目录 ./bin/hadoop version # 查看 Hadoop 的版本信息 或者直接输入 hadoop version 命令也可以查看。 hadoop version # 查看 Hadoop 的版本信息 📷 查看Hadoop版本信息.png Hadoop 安装方式有三种,分别是单机模式,伪分布式模式,分布式模式。 单机模式:Hadoop 默认模式为非分布式模式(本地模式),无需进行其他配置即可运行。非分布式即单 Java 进程,方便进行调试。 伪分布式模式:Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。 分布式模式:使用多个节点构成集群环境来运行Hadoop,需要多台主机,也可以是虚拟主机。 Hadoop 伪分布式配置 现在我们就可以来使用 Hadoop 运行一些例子,Hadoop 附带了很多的例子,可以运行 hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar 看到所有的例子。 我们这里来运行一个查询的例子,将 input 文件夹作为输入文件夹,筛选当中符合正则表达式 dfs[a-z.]+ 的单词,统计它的次数,将筛选结果输出到 output 文件夹中。 cd /usr/local/hadoop # 切换当前目录为 /usr/local/hadoop 目录 mkdir ./input # 在当前目录下创建 input 文件夹 cp ./etc/hadoop/*.xml ./input # 将 hadoop 的配置文件复制到新建的输入文件夹 input 中 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+' cat ./output/* # 查看输出结果 通过命令 cat ./output/* 查看结果,符合正则的单词 dfsadmin 出现了 1次。 📷 运行测试Hadoop例子.png 若运行出错,如出现如下图提示。 📷 运行Hadoop例子出错.png 若出现提示 “WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable”,该 WARN 提示可以忽略,不影响 Hadoop 正常运行。 注意:Hadoop 默认不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将 output 文件夹删除。 rm -rf ./output # 在 /usr/local/hadoop 目录下执行 测试我们的 Hadoop 安装没有问题,我们可以开始设置 Hadoop 的环境变量,同样在 ~/.bashrc 文件中配置。 gedit ~/.bashrc # 使用 gedit 文本编辑器打开 .bashrc 文件 在 .bashrc 文件最后面增加如下内容,注意 HADOOP_HOME 的位置对不对,如果都是按照前面的配置,这部分可照抄。 # Hadoop Environment Variables export HADOOP_HOME=/usr/local/hadoop export HADOOP_INSTALL=$HADOOP_HOME export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export YARN_HOME=$HADOOP_HOME export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin 📷 Hadoop环境变量的配置.png 保存后记得关掉 gedit 程序,否则会占用终端,无法执行下面的命令,可以按 【Ctrl + C】键终止该程序。 保存后,不要忘记执行如下命令使配置生效。 source ~/.bashrc Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 下,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml 。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。 修改配置文件 core-site.xml (通过 gedit 编辑会比较方便,输入命令, gedit ./etc/hadoop/core-site.xml)。 在 <configuration></configuration> 中间插入如下的代码。 <configuration> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration> 同样的,修改配置文件 hdfs-site.xml,gedit ./etc/hadoop/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/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/data</value> </property> </configuration> 配置完成后,执行 NameNode 的格式化。(Hadoop 首次启动需要该命令) hdfs namenode -format 成功的话,会看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若为 “Exitting with status 1” 则是出错。 📷 NameNode格式化.png 接下来启动 Hadoop。 start-dfs.sh # 开启 NameNode 和 DataNode 进程 若出现如下 SSH 的提示 “Are you sure you want to continue connecting”,输入 yes 即可。 📷 启动Hadoop注意事项.png 启动完成后,可以通过命令 jps 来判断是否成功启动,若出现下面 NameNode、DataNode、SecondaryNameNode、Jps 四个进程,则 Hadoop 启动成功。 jps # 查看进程判断 Hadoop 是否启动成功 📷 判断Hadoop是否启动成功.png 成功启动后,也可以访问 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。 📷 Hadoop正常启动Web界面.png 启动YARN YARN 是从 MapReduce 中分离出来的,负责资源管理与任务调度。YARN 运行于 MapReduce 之上,提供了高可用性、高扩展性。(伪分布式不启动 YARN 也可以,一般不会影响程序执行) 上述通过 start-dfs.sh 命令启动 Hadoop,仅仅是启动了 MapReduce 环境,我们可以启动 YARN ,让 YARN 来负责资源管理与任务调度。 首先修改配置文件 mapred-site.xml,需要先将 mapred-site.xml.template 文件的重命名为 mapred-site.xml。 mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml # 文件重命名 gedit ./etc/hadoop/mapred-site.xml # 用gedit 文本编辑器打开 <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> 接着修改配置文件 yarn-site.xml。 gedit ./etc/hadoop/yarn-site.xml # 用gedit 文本编辑器打开 <configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration> 然后就可以启动 YARN 了,执行 start-yarn.sh 命令。 注意:在启动 YARN 之前,要确保 dfs Hadoop 已经启动,也就是执行过 start-dfs.sh。 start-yarn.sh # 启动YARN mr-jobhistory-daemon.sh start historyserver # 开启历史服务器,才能在Web中查看任务运行情况 开启后通过 jps 查看,可以看到多了 NodeManager 和 ResourceManager 两个进程,如下图所示。 📷 启动YARN.png 启动 YARN 之后,运行实例的方法还是一样的,仅仅是资源管理方式、任务调度不同。启动 YARN 有个好处是可以通过 Web 界面查看任务的运行情况:http://localhost:8088/cluster 如下图所示。 📷 YARN的Web界面.png YARN 主要是为集群提供更好的资源管理与任务调度,如果不想启动 YARN,务必把配置文件 mapred-site.xml 重命名,改成 mapred-site.xml.template,需要用时改回来就行。否则在该配置文件存在,而未开启 YARN 的情况下,运行程序会提示 “Retrying connect to server: 0.0.0.0/0.0.0.0:8032” 的错误,这也是为何该配置文件初始文件名为 mapred-site.xml.template。 关闭 YARN 的命令如下,开启是 start,关闭是 stop。 stop-yarn.sh mr-jobhistory-daemon.sh stop historyserver 在平时的学习中,我们使用伪分布式就足够了。... 展开详请
软件环境: 虚拟机:VMware Pro14 Linux:CentOS-6.4(下载地址,下载DVD版本即可) JDK:OpenJDK1.8.0 (强力建议不要使用 Oracle 公司的 Linux 版本的 JDK) Hadoop:2.6.5(下载地址) 虚拟机的安装和Linux系统的安装这里就省略了,可以参照网上的教程安装,一般没什么大问题,需要注意的是记住这里你输入的用户密码,下面还要用,如下图所示。 📷 设置用户密码.png 用户选择 使用虚拟机安装好系统后,可以看到登录界面,如下图所示。 📷 进入系统.png 选择 Other ,在 Username 输入框中输入 root,回车,再在 Password 输入框中输入你创建用户时密码。root 用户是安装 CentOS 自动创建的超级用户,但密码和你安装系统时创建的普通用户密码是一样的。 平时在使用 CentOS 时,并不推荐使用 root 用户,因为该用户具有整个系统的最高权限,使用该用户可能会导致严重的后果,但前提是你对 Linux 很熟,才会误操作。搭建 Hadoop 的大数据平台,使用普通用户,很多命令需要 sudo 命令来获取 root 用户的权限,比较麻烦,所以索性直接使用 root 用户。 安装SSH 集群、单节点模式都需要用到 SSH 登陆(类似于远程登陆,你可以登录某台 Linux 主机,并且在上面运行命令)。 首先确保你的 CentOS 系统可以正常的上网,你可以查看桌面右上角的网络图标,若显示红叉则表明未联网,可点击选择可用网络,也可以使用桌面左上角的火狐浏览器输入网址验证是否网络连接正常。如果还是无法上网,检查虚拟机的设置,选用 NAT 模式,或者上网百度解决。 📷 检查网络状况.png 确定网络连接正常后,打开 CentOS 的终端,可在 CentOS 的桌面点击鼠标右键,选择 Open In Terminal,如下图所示。 📷 打开终端.png 一般情况下,CentOS 默认已安装了 SSH client、SSH server,可打开终端执行如下命令进行检验: rpm -qa | grep ssh 如果返回的结果如下图所示,包含了 SSH client 跟 SSH server,则不需要再安装。 📷 查看SSH是否已安装.png 如果需要安装,则可以通过 yum 这个包管理器进行安装。(安装过程中会让你输入 [y/N],输入 y 即可) 注意:命令是单条执行的,不是直接把两条命令粘贴过去。 终端中的粘贴可通过鼠标点击右键选择 Paste 粘贴,也可通过快捷键 【Shift + Insert】粘贴。 yum install openssh-clients yum install openssh-server SSH安装完成后,执行如下命令测试一下 SSH 是否可用(SSH首次登陆提示 yes/no 信息,输入 yes 即可,然后按照提示输入 root 用户的密码,这样就登录到本机了),如下图所示。 📷 首次登录SSH.png 但这样登陆需要每次都输入密码,我们需要配置成SSH无密码登陆比较方便。 首先输入 exit 退出刚才的 ssh,就回到了我们原先的终端窗口,然后利用 ssh-keygen 生成密钥,并将密钥加入到授权中。 exit # 退出刚才的 ssh localhost cd ~/.ssh/ # 若提示没有该目录,请先执行一次ssh localhost ssh-keygen -t rsa # 会有提示,都按回车即可 cat id_rsa.pub >> authorized_keys # 加入授权 chmod 600 ./authorized_keys # 修改文件权限 此时再用 ssh localhost 命令,无需输入密码就可以直接登陆了,如下图所示。 📷 再次登录SSH.png 安装 Java 环境 Java 环境可选择 Oracle 的 JDK,或是 OpenJDK(可看作 JDK 的开源版本),现在一般 Linux 系统默认安装的基本是 OpenJDK,这里安装的是 OpenJDK1.8.0版本的。 有的 CentOS 6.4 默认安装了 OpenJDK 1.7,这里我们可以使用命令检查一下,和 Windows 下的命令一样,还可以查看 JAVA_HOME 这个环境变量的值。 java -version # 查看 java 的版本 javac -version # 查看编译命令 Javac 的版本 echo $JAVA_HOME # 查看 $JAVA_HOME 这个环境变量的值 如果系统没有安装 OpenJDK,我们可以通过 yum 包管理器来安装。(安装过程中会让输入 [y/N],输入 y 即可) yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel #安装 openjdk1.8.0 通过上述命令安装 OpenJDK,默认安装位置为 /usr/lib/jvm/java-1.8.0,下面配置 JAVA_HOME 时就使用这个位置。 接着需要配置一下 JAVA_HOME 环境变量,为了方便,直接在 ~/.bashrc 中进行设置,相当于配置的是 Windows 的用户环境变量,只对单个用户生效,当用户登录后,每次打开 shell 终端,.bashrc 文件都会被读取。 修改文件,可以直接使用 vim 编辑器打开文件,也可以使用类似于 Windows 记事本的 gedit 文本编辑器。 下面命令任选其一。 vim ~/.bashrc # 使用 vim 编辑器在终端中打开 .bashrc 文件 gedit ~/.bashrc # 使用 gedit 文本编辑器打开 .bashrc 文件 在文件最后面添加如下单独一行(指向 JDK 的安装位置),并保存。 📷 配置JAVA_HOME环境变量.png 接着还需要让该环境变量生效,执行如下命令。 source ~/.bashrc # 使变量设置生效 设置好后我们来检验一下是否设置正确,如下图所示。 echo $JAVA_HOME # 检验变量值 java -version javac -version $JAVA_HOME/bin/java -version # 与直接执行 java -version 一样 📷 检查JAVA_HOME环境变量是否配置正确.png 这样,Hadoop 所需的 Java 运行环境就安装好了。 安装 Hadoop 在前面软件环境已经给出了 hadoop2.6.5 的下载地址,可以直接通过火狐浏览器打开下载,默认下载位置是在用户的 Home 中的 Downloads 文件夹下,如下图所示。 📷 下载Hadoop.png 下载完成后,我们将 Hadoop 解压到 /usr/local/ 中。 tar -zxf ~/下载/hadoop-2.6.5.tar.gz -C /usr/local # 解压到/usr/local目录中 cd /usr/local/ # 切换当前目录为 /usr/local 目录 mv ./hadoop-2.6.5/ ./hadoop # 将文件夹名改为hadoop chown -R root:root ./hadoop # 修改文件权限,root 是当前用户名 Hadoop 解压后即可使用,输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息。 cd /usr/local/hadoop # 切换当前目录为 /usr/local/hadoop 目录 ./bin/hadoop version # 查看 Hadoop 的版本信息 或者直接输入 hadoop version 命令也可以查看。 hadoop version # 查看 Hadoop 的版本信息 📷 查看Hadoop版本信息.png Hadoop 安装方式有三种,分别是单机模式,伪分布式模式,分布式模式。 单机模式:Hadoop 默认模式为非分布式模式(本地模式),无需进行其他配置即可运行。非分布式即单 Java 进程,方便进行调试。 伪分布式模式:Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。 分布式模式:使用多个节点构成集群环境来运行Hadoop,需要多台主机,也可以是虚拟主机。 Hadoop 伪分布式配置 现在我们就可以来使用 Hadoop 运行一些例子,Hadoop 附带了很多的例子,可以运行 hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar 看到所有的例子。 我们这里来运行一个查询的例子,将 input 文件夹作为输入文件夹,筛选当中符合正则表达式 dfs[a-z.]+ 的单词,统计它的次数,将筛选结果输出到 output 文件夹中。 cd /usr/local/hadoop # 切换当前目录为 /usr/local/hadoop 目录 mkdir ./input # 在当前目录下创建 input 文件夹 cp ./etc/hadoop/*.xml ./input # 将 hadoop 的配置文件复制到新建的输入文件夹 input 中 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+' cat ./output/* # 查看输出结果 通过命令 cat ./output/* 查看结果,符合正则的单词 dfsadmin 出现了 1次。 📷 运行测试Hadoop例子.png 若运行出错,如出现如下图提示。 📷 运行Hadoop例子出错.png 若出现提示 “WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable”,该 WARN 提示可以忽略,不影响 Hadoop 正常运行。 注意:Hadoop 默认不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将 output 文件夹删除。 rm -rf ./output # 在 /usr/local/hadoop 目录下执行 测试我们的 Hadoop 安装没有问题,我们可以开始设置 Hadoop 的环境变量,同样在 ~/.bashrc 文件中配置。 gedit ~/.bashrc # 使用 gedit 文本编辑器打开 .bashrc 文件 在 .bashrc 文件最后面增加如下内容,注意 HADOOP_HOME 的位置对不对,如果都是按照前面的配置,这部分可照抄。 # Hadoop Environment Variables export HADOOP_HOME=/usr/local/hadoop export HADOOP_INSTALL=$HADOOP_HOME export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export YARN_HOME=$HADOOP_HOME export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin 📷 Hadoop环境变量的配置.png 保存后记得关掉 gedit 程序,否则会占用终端,无法执行下面的命令,可以按 【Ctrl + C】键终止该程序。 保存后,不要忘记执行如下命令使配置生效。 source ~/.bashrc Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 下,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml 。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。 修改配置文件 core-site.xml (通过 gedit 编辑会比较方便,输入命令, gedit ./etc/hadoop/core-site.xml)。 在 <configuration></configuration> 中间插入如下的代码。 <configuration> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration> 同样的,修改配置文件 hdfs-site.xml,gedit ./etc/hadoop/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/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/data</value> </property> </configuration> 配置完成后,执行 NameNode 的格式化。(Hadoop 首次启动需要该命令) hdfs namenode -format 成功的话,会看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若为 “Exitting with status 1” 则是出错。 📷 NameNode格式化.png 接下来启动 Hadoop。 start-dfs.sh # 开启 NameNode 和 DataNode 进程 若出现如下 SSH 的提示 “Are you sure you want to continue connecting”,输入 yes 即可。 📷 启动Hadoop注意事项.png 启动完成后,可以通过命令 jps 来判断是否成功启动,若出现下面 NameNode、DataNode、SecondaryNameNode、Jps 四个进程,则 Hadoop 启动成功。 jps # 查看进程判断 Hadoop 是否启动成功 📷 判断Hadoop是否启动成功.png 成功启动后,也可以访问 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。 📷 Hadoop正常启动Web界面.png 启动YARN YARN 是从 MapReduce 中分离出来的,负责资源管理与任务调度。YARN 运行于 MapReduce 之上,提供了高可用性、高扩展性。(伪分布式不启动 YARN 也可以,一般不会影响程序执行) 上述通过 start-dfs.sh 命令启动 Hadoop,仅仅是启动了 MapReduce 环境,我们可以启动 YARN ,让 YARN 来负责资源管理与任务调度。 首先修改配置文件 mapred-site.xml,需要先将 mapred-site.xml.template 文件的重命名为 mapred-site.xml。 mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml # 文件重命名 gedit ./etc/hadoop/mapred-site.xml # 用gedit 文本编辑器打开 <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> 接着修改配置文件 yarn-site.xml。 gedit ./etc/hadoop/yarn-site.xml # 用gedit 文本编辑器打开 <configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration> 然后就可以启动 YARN 了,执行 start-yarn.sh 命令。 注意:在启动 YARN 之前,要确保 dfs Hadoop 已经启动,也就是执行过 start-dfs.sh。 start-yarn.sh # 启动YARN mr-jobhistory-daemon.sh start historyserver # 开启历史服务器,才能在Web中查看任务运行情况 开启后通过 jps 查看,可以看到多了 NodeManager 和 ResourceManager 两个进程,如下图所示。 📷 启动YARN.png 启动 YARN 之后,运行实例的方法还是一样的,仅仅是资源管理方式、任务调度不同。启动 YARN 有个好处是可以通过 Web 界面查看任务的运行情况:http://localhost:8088/cluster 如下图所示。 📷 YARN的Web界面.png YARN 主要是为集群提供更好的资源管理与任务调度,如果不想启动 YARN,务必把配置文件 mapred-site.xml 重命名,改成 mapred-site.xml.template,需要用时改回来就行。否则在该配置文件存在,而未开启 YARN 的情况下,运行程序会提示 “Retrying connect to server: 0.0.0.0/0.0.0.0:8032” 的错误,这也是为何该配置文件初始文件名为 mapred-site.xml.template。 关闭 YARN 的命令如下,开启是 start,关闭是 stop。 stop-yarn.sh mr-jobhistory-daemon.sh stop historyserver 在平时的学习中,我们使用伪分布式就足够了。

使用mapreduce命令提示没有命令?

.这里拉拉人一枚!!!

hadoop的实验貌似挂了?

小Q

腾讯云 · 产品运营 (已认证)

让所有技术入门更容易

您好,我们重新 review 了 hadoop 实验教程的内容,这里的问题主要是因为 hadoop 2.7 版本要求 JDK 8 以上的版本,使用 JDK 7 就会有上述的 UnsupportedClassVersionError 异常,教程的内容我们已经修正,多谢您的反馈!

Hadoop是什么?怎么使用呢?

hadoop是分布式系统基础架构,MapReduce才是用于大规模数据集的并行运算,在说说云计算,云计算的这个概率太广泛了,100个人出来有一百种解释。再说说三种的区别,答案就是:这三个根本就不是同一类型的东西。只能说这三个东西的关系是什么? 先说说hadoop和MaopReduce 的关系 hadoop:框架 MapReduce:模式。 Hadoop与MapReduce的关系:hadoop框架实现mapreduce模式 简单的说就是:hadoop的框架采取mapreduce的模式处理海量数据 在说说云计算与hadoop和MaopReduce 的关系 注:“云计算”是一个概念词。(本回答以计算方面解释) 云计算:大型可扩展计算器(简称:载体 ) 关系:利用hadoop的框架并采取mapreduce的模式在云计算大型的计算能力下处理海量数据 在这里在说说,云计算具备扩展性(这个简单的说就是:一台服务器的计算处理能不够,你可以立马在买一台一起处理)所以有了伪分布式hadoop和完全分布式 本回答支持转载和抄袭,不需要注明出处,不需要授权 ... 展开详请
领券