阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

在Linux下安装与配置Hadoop

119次阅读
没有评论

共计 21893 个字符,预计需要花费 55 分钟才能阅读完成。

在 Linux 上安装 Hadoop 之前,需要安装两个程序:

  1. JDK1.6 或者更高的版本;
  2. SSH(安全外壳协议),推荐安装 OpenSSH

下面简述一下安装这两个程序的原因:

Hadoop 使用 Java 开发的,Hadoop 的编译及 MapReduce 的运行都需要使用 JDK。

Hadoop 需要通过 SSH 来启动 salve 列表中各台主机的守护进程,因此 SSH 也是必须安装的,即使是安装伪分布式版本(因为 Hadoop 并没有区分集群式和伪分布式)。对于伪分布式,Hadoop 会采用与集群相同的处理方式,即依次序启动文件 conf/slaves 中记载的主机上进程,只不过伪分布式中 salves 为 localhost(自身),所以对于伪分布式 Hadoop,SSH 一样是必须的。

1  安装 JDK1.7
Linux 会自带 JDK,如果不使用自带版本的话需要卸载。

(一)  卸载系统自带的 jdk 版本

查看自带的 jdk

#rpm -qa | grep gcj

看到如下信息:

libgcj-4.1.2-44.el5

java-1.4.2-gcj-compat-1.4.2.0-40jpp.115

使用 rpm -e –nodeps 命令删除上面查找的内容:

#rpm -e –nodeps java-1.4.2-gcj-compat-1.4.2.0-40jpp.115

(二)  卸载 rpm 安装的 jkd 版本

查看安装的 jdk:

#rpm -qa|grep jdk

看到如下信息:

java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5

卸载:

#rpm -e –nodeps java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5

(三)  安装 jdk

首先到 sun 官网下载安装包,下面是最新的安装包 http://java.sun.com/javase/downloads/index.jsp

如果希望找以前的版本,到下面的地址可以找到 http://java.sun.com/products/archive/

有 jdk-6u7-linux-i586-rpm.bin 和 jdk-6u7-linux-i586.bin 两种版本。bin 是二进制包,而 rpm 是 RedHat package 就是红帽的标准安装包。区别就是 rpm 安装的时候给你自动配置,一般都是 lib 安装到 /usr/lib,bin 安装到 /usr/bin 下边,就算不是,在 /usr/bin 下也要建立一个软连接。

下边以现有最新版本 jdk-7u3-linux-i586.rpm 为例进行安装:

将安装文件放到:/usr/java 目录下,修改权限,命令如下(需先用 cd 命令切换到相应目录下):

# chmod +x  jdk-7u3-linux-i586.rpm

执行文件的安装:

# rpm-ivh jdk-7u3-linux-i586.rpm

(四)  配置环境变量

修改 /etc/profile 文件,在该文件最后加上

export JAVA_HOME=/usr/java/jdk1.7.0_03

export PATH=$PATH: /usr/java/jdk1.7.0_03/bin

保存

(五)  执行

cd /etc

source profile

(六)  验证 JDK 是否安装成功

[root@localhost ~]# java -version

java version “1.7.0”

Java(TM) SE Runtime Environment (build 1.7.0-b147)

Java HotSpot(TM) Server VM (build 21.0-b17, mixed mode)

2  配置 SSH 免密码登陆
首先,确保当前可以连接到互联网。在 root 下修改 /etc/ssh/sshd_config 文件(客户端、服务器都需要更改),将

#AuthorizedKeysFile  .ssh/authorized_keys

前面的#号去掉,即启用

AuthorizedKeysFile  .ssh/authorized_keys

如果需要 root 也能 ssh 登录,把“#PermitRootLogin yes”前面的#号也去掉。

同样 root 账户下,重启 sshd 服务使之生效

/etc/rc.d/init.d/sshd  restart

客户端中,切换到需要 ssh 登录的帐户下:

ssh-keygen  -t  dsa 

产生公私钥对。回车,采用默认文件保存钥匙。

xxxxx 回车  键入密码短语,直接回车为不建立密码短语。密码短语至少 5 个字符

xxxxx 回车  重复密码短语,直接回车为不建立密码短语

也可以:

ssh-keygen  -t  dsa  -P  ‘ ‘  -f  /home/ 账户名 /.ssh/id_dsa 

ssh-keygen 代表生成密钥;-t(注意区分大小写)表示指定生成的迷密钥类型;dsa 是 dsa 密钥认证的意思,即密钥类型;- P 用于提供密语;- f 指定生成的密钥文件。这个

公私钥产生在此账户的.ssh 目录中,id_dsa 为私钥,id_dsa.pub 为公钥

服务器中,切换到需要 ssh 登录的帐户下:

如果服务器中尚未建立公私钥对,那么首先按照客户端的方法建立公私钥对

scp  账户名 @客户端主机名或 ip 地址:/home/ 帐户名 /.ssh/id_dsa.pub  /home/ 帐户名 /

将客户端账户的公钥拷到服务器中。客户端用主机名或 ip 地址均可,但是需与 ssh 登录命令相符,建议将主机名与 ip 地址写入 /etc/hosts 中,此处用主机名即可(下同)。

yes  将客户端写入 known_hosts 中

输入客户端中的账户密码完成复制

将 id_rsa.pub 中的内容添加到 authorized_keys 文件中,authorized_keys 文件名需与 sshd_config 中的设置相符

cat  /home/ 帐户名 /id_rsa.pub  >>/home/ 帐户名 /.ssh/authorized_keys

修改 authorized_keys 文件的权限,至少为 644,也可更为严格(600),不修改的话 ssh 无密码登录不起作用:

chmod  644  /home/ 帐户名 /.ssh/authorized_keys 

客户端中,切换到需要 ssh 登录的帐户下:

ssh  服务器主机名  – 登录服务器,若在服务器与客户端中的帐户名不同,则

ssh  帐户名 @服务器主机名

yes  – 将服务器写入 known_hosts 中

若产生公私钥时设置了密码短语,还需要输入密码短语,为了方便,可在客户端中 ssh-add,然后输入密码短语,下次再 ssh 登录,无需再输入密码短语。

验证:

[test@localhost ~]$ ssh -version

OpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008

Bad escape character ‘rsion’.

显示 SSH 已经安装成功了。输入命令:

ssh localhost

会有如下显示:

[test@localhost .ssh]$ ssh localhost

The authenticity of host ‘localhost (127.0.0.1)’ can’t be established.

RSA key fingerprint is 2b:36:6b:23:4d:e4:71:2b:b0:79:69:36:0e:65:3b:0f.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘localhost’ (RSA) to the list of known hosts.

 

Last login: Tue Oct 30 13:08:33 2012 from localhost.localdomain

这说明已经安装成功,第一次登录时会询问你是否继续链接,输入 yes 即可进入。

实际上,在 Hadoop 的安装过程中,是否无密码登陆是无关紧要的,但是如果不配置无密码登录,每次启动 Hadoop,都需要输入密码以登陆到每台机器的 DataNode 上,考虑到一般的 Hadoop 集群动辄数百台或上千台机器,因此一般来说都会配置 SSH 的无密码登录。

关于公私钥对的一点理解:公私钥对就像是一套钥匙和锁,公钥是锁,私钥是钥匙。私钥留在客户端中,公钥发给服务器。服务器可以有很多把锁,客户端只有一把钥匙。当客户端 ssh 登录服务器时,服务器会找到这个客户端发的锁,然后跟客户端要钥匙,如果钥匙是配套的,那么登录成功,反之登录失败。当然,以上是针对同一个用户说的,不同用户的公私钥对也不同,而且每次 ssh-keygen 产生的公私钥对也不同。

备注将普通用户修改为超级用户的方法:

l  进入超级用户模式。也就是输入 ”su -“, 系统会让你输入超级用户密码,输入密码后就进入了超级用户模式。

l  添加文件的写权限。也就是输入命令 ”chmod u+w /etc/sudoers”。

l  编辑 /etc/sudoers 文件。也就是输入命令 ”vim /etc/sudoers”, 输入 ”i” 进入编辑模式,找到这一行:”root ALL=(ALL) ALL” 在起下面添加 ”xxx ALL=(ALL) ALL”(这里的 xxx 是你的用户名),然后保存(就是先摁一下 Esc 键,然后输入 ”:wq”)退出。

l  撤销文件的写权限。也就是输入命令 ”chmod u-w /etc/sudoers”。

3  安装并运行 Hadoop
先介绍一下 Hadoop 对各个节点的角色意义:

Hadoop 分别从三个角度将主机划分为两种角色。第一,划分为 master 和 salve,即主人与奴隶;第二,从 HDFS 的角度,将主机划分为 NameNode 和 DataNode(在分布式文件系统中,目标的管理很重要,管理目录的就相当于主人,而 NameNode 就是目录管理者);第三,从 MapReduce 的角度,将主机划分为 JobTracker 和 TaskTracker(一个 job 经常被划分为多个 task,从这个角度不难理解它们之间的关系)。

Hadoop 有官方发行版与 cloudera 版,其中 cloudera 版是 Hadoop 的商用版本。下面介绍 Hadoop 官方发行版的安装方法。

Hadoop 有三种运行方式:单节点方式、单击伪分布方式与集群方式。乍看之下,前两种方式并不能体现云计算的优势,在实际应用中并没有什么意义,但是在程序的测试与调试过程中,他们还是很有意义的。

可以通过下面的地址下载获得 Hadoop 的官方发行版:

http://www.apache.org/dist/hadoop/core/

下载 hadoop-1.0.4.tar.gz 并将其解压,解压到用户目录下:/home/[用户]/

tar -xzvf  hadoop-1.0.4.tar.gz

l  单节点方式配置

安装单节点的 Hadoop 无须配置,在这种方式下,Hadoop 被认为是一个单独的 java 进程,这种方式经常用来测试。

l  伪分布式配置

可以把伪分布式的 Hadoop 看作是一个节点的集群,在这个集群中,这个节点既是 master,也是 salve;既是 NameNode 也是 DataNode;既是 JobTracker,也是 TaskTracker。

伪分布式的配置过程也很简单,只需要修改几个文件,如下所示。

进入 conf 文件夹(在解压缩的目录下),修改配置文件。

[test@localhost conf]$ pwd

/home/test/hadoop-1.0.4/conf

[test@localhost conf]$ ls hadoop-env.sh

hadoop-env.sh

[test@localhost conf]$ vim hadoop-env.sh

添加内容:

export JAVA_HOME=/usr/java/jdk1.7.0

指定 JDK 的安装位置

[test@localhost conf]$ pwd

/home/test/hadoop-1.0.4/conf

[test@localhost conf]$ ls core-site.xml

core-site.xml

修改文件

[test@localhost conf]$ vim core-site.xml

添加内容:

<configuration>

  <property>

      <name>fs.default.name</name>

      <value>hdfs://localhost:9000</value>

  </property>

</configuration>

这是 hadoop 核心的配置文件,这里配置的是 HDFS 的地址和端口号。

[test@localhost conf]$ ls hdfs-site.xml

hdfs-site.xml

修改文件:

<configuration>

  <property>

    <name>dfs.replication</name>

    <value>1</value>

  </property>

</configuration>

这是 Hadoop 中的 HDFS 的配置,配置的备份方式默认为 3,��单机版的 Hadoop 中,需要将其改为 1.

[test@localhost conf]$ ls mapred-site.xml

mapred-site.xml

[test@localhost conf]$ vim mapred-site.xml

修改文件:

<configuration>

  <property>

      <name>mapred.job.tracker</name>

      <value>localhost:9001</value>

  </property>

</configuration>

这是 Hadoop 中 MapReduce 的配置文件,配置的是 JobTracker 的地址和端口。

需要注意的是,如果安装的是 0.20 之前的版本,那么只有一个配置文件,即为 Hadoop-site.xml。

接下来,在启动 Hadoop 前,需格式化 Hadoop 的文件系统 HDFS(这点与 Windows 是一样的,重新分区后的卷总是要格式化的)。进入 Hadoop 文件夹,输入下面的命令:

[test@localhost hadoop-1.0.4]$  bin/hadoop namenode -format

12/11/01 00:20:50 INFO namenode.NameNode: STARTUP_MSG:

 

Re-format filesystem in /tmp/hadoop-test/dfs/name ? (Y or N) Y

12/11/01 00:20:55 INFO util.GSet: VM type      = 32-bit

12/11/01 00:20:55 INFO util.GSet: 2% max memory = 17.77875 MB

12/11/01 00:20:55 INFO util.GSet: capacity      = 2^22 = 4194304 entries

12/11/01 00:20:55 INFO util.GSet: recommended=4194304, actual=4194304

12/11/01 00:20:55 INFO namenode.FSNamesystem: fsOwner=test

12/11/01 00:20:55 INFO namenode.FSNamesystem: supergroup=supergroup

12/11/01 00:20:55 INFO namenode.FSNamesystem: isPermissionEnabled=true

12/11/01 00:20:55 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100

12/11/01 00:20:55 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)

12/11/01 00:20:55 INFO namenode.NameNode: Caching file names occuring more than 10 times

12/11/01 00:20:56 INFO common.Storage: Image file of size 110 saved in 0 seconds.

12/11/01 00:20:56 INFO common.Storage: Storage directory /tmp/hadoop-test/dfs/name has been successfully formatted.

12/11/01 00:20:56 INFO namenode.NameNode: SHUTDOWN_MSG:

 

格式化文件系统,接下来启动 Hadoop。

首先赋予 test 用户 hadoop 文件夹的使用权限:

[test@localhost ~]$ chown -hR test /home/test/hadoop-1.0.4

输入命令:

[test@localhost hadoop-1.0.4]$ bin/start-all.sh

starting namenode, logging to /home/test/hadoop-1.0.4/libexec/../logs/hadoop-test-namenode-localhost.localdomain.out

localhost: starting datanode, logging to /home/test/hadoop-1.0.4/libexec/../logs/hadoop-test-datanode-localhost.localdomain.out

localhost: starting secondarynamenode, logging to /home/test/hadoop-1.0.4/libexec/../logs/hadoop-test-secondarynamenode-localhost.localdomain.out

starting jobtracker, logging to /home/test/hadoop-1.0.4/libexec/../logs/hadoop-test-jobtracker-localhost.localdomain.out

localhost: starting tasktracker, logging to /home/test/hadoop-1.0.4/libexec/../logs/hadoop-test-tasktracker-localhost.localdomain.out

利用 jps 查看已经启动的服务:

[test@localhost ~]$ cd /home/test/hadoop-1.0.4

[test@localhost hadoop-1.0.4]$ jps

[test@localhost hadoop-1.0.4]$ jps

12657 SecondaryNameNode

12366 NameNode

12995 Jps

12877 TaskTracker

12739 JobTracker

12496 DataNode

最后,验证 Hadoop 是否安装成功。打开浏览器,分别输入网址:

http://localhost:50070/(HDFS 的 Web 页面)

http://localhost:50030/(MapReduce 的 Web 页面)

如果都能看到,说明 Hadoop 已经安装成功。对于 Hadoop 来说,安装 MapReduce 及 HDFS 都是必须的,但是如果有必要,依然可以只启动 HDFS 或者 MapReduce:

[test@localhost hadoop-1.0.4]$ bin/start-dfs.sh

[test@localhost hadoop-1.0.4]$ bin/start-mapred.sh

Ubuntu14.04 下 Hadoop2.4.1 单机 / 伪分布式安装配置教程  http://www.linuxidc.com/Linux/2015-02/113487.htm

CentOS 安装和配置 Hadoop2.2.0  http://www.linuxidc.com/Linux/2014-01/94685.htm

Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm

Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm

Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm

Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm

单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2015-07/120247p2.htm

4  搭建 Hadoop 的开发环境
Linux 下安装 eclipse

下载地址:http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/junor

下载:eclipse-jee-juno-linux-gtk.tar.gz

解压缩:

[test@localhost ~]$ pwd

/home/test

[test@localhost ~]$ tar -xvf eclipse-jee-juno-linux-gtk.tar.gz

刚刚解压缩出来的 Eclipse 是找不到 Java 执行路径的,为了让每一位 linux 的使用者都可以执行 eclipse,需要执行一下命令:

[test@localhost eclipse]$ /home/test/eclipse/eclipse -vm /usr/java/jdk1.7.0/bin/java -data ~/workspace

其中 /home/test/eclipse/eclipse 是对 eclipse-jee-juno-linux-gtk.tar.gz 解压之后的 eclipse 文件: -vm 参数用以指定使用哪一个 jvm 来执行 eclipse,在此我们指定之前安装的 Sun JDK 1.7.0-01 版 -date 参数用以告诉 eclipse 要将项目储存在哪一个目录中。在此我们指定储存在使用者 home 目录 (~) 或用户根目录(”)的 workspace 目录中。此时,会看到 eclipse 图形界面出现,安装成功。可以在桌面创建启动器,将启动命令写入:/home/test/eclipse/eclipse,这样每次在桌面上就可以直接启动 eclipse 了。

下载插件 hadoop-eclipse-plugin-1.0.3.jar,将插件拷贝到 /home/test/eclipse/plugins 下即可。

在 Linux 下安装与配置 Hadoop

  • 在左边的 project explorer 上头会有一个 DFS locations 的标志
  • 在 windows -> preferences 里面会多一个 hadoop map/reduce 的选项,选中这个选项,然后右边,把下载的 hadoop 根目录选中

如果能看到以上两点说明安装成功了。

插件装完启动 hadoop,然后就可以建一个 hadoop 连接了,就相当于 eclipse 里配置一个 weblogic 的连接。

第一步,打开 Map/Reduce Locations 视图,在右上角有个大象的标志点击:

在 Linux 下安装与配置 Hadoop

第二步,在点击大象后弹出的对话框进行进行参数的添加,如下图:

在 Linux 下安装与配置 Hadoop

location name: 这个随便填写:localhost.

Map/Reduce Master 这个框里

Host:就是 jobtracker 所在的集群机器,这里写 localhost

Hort:就是 jobtracker 的 port,这里写的是 9001

这两个参数就是 mapred-site.xml 里面 mapred.job.tracker 里面的 ip 和 port

DFS Master 这个框里

Host:就是 namenode 所在的集群机器,这里写 localhost

Port:就是 namenode 的 port,这里写 9000

这两个参数就是 core-site.xml 里面 fs.default.name 里面的 ip 和 port

(Use M/R master host,这个复选框如果选上,就默认和 Map/Reduce Master 这个框里的 host 一样,如果不选择,就可以自己定义输入,这里 jobtracker 和 namenode 在一个机器上,所以是一样的,就勾选上)

 user name:这个是连接 hadoop 的用户名,因为我是用 test 用户安装的 hadoop,而且没建立其他的用户,所以就用 test。下面的不用填写。然后点击 finish 按钮,此时,这个视图中就有多了一条记录。

在 Linux 下安装与配置 Hadoop

第三步,重启 eclipse 并重新编辑刚才建立的那个连接记录,如图现在编辑 advance parameters tab 页

在 Linux 下安装与配置 Hadoop

(重启编辑 advance parameters tab 页原因:在新建连接的时候,这个 advance paramters  tab 页面的一些属性会显示不出来,显示不出来也就没法设置,所以必须重启一下 eclipse 再进来编辑才能看到)

这里大部分的属性都已经自动填写上了,其实就是把 core-defaulte.xml、hdfs-defaulte.xml、mapred-defaulte.xml 里面的一些配置属性展示出来。因为在安装 hadoop 的时候,其 site 系列配置文件里有改动,所以这里也要弄成一样的设置。主要关注的有以下属性:

fs.defualt.name:这个在 General tab 页已经设置了

mapred.job.tracker:这个在 General tab 页也设置了

然后点击 finish,然后就连接上了,连接上的标志如图:

在 Linux 下安装与配置 Hadoop

DFS Locations 下面会有一只大象,下面会有一个文件夹,即 hdfs 的根目录,这里就是展示的分布式文件系统的目录结构了。

到这里为止,Eclipse hadoop 开发环境配置已经完全搭建完毕。最后,就可以在 eclipse 中像一般 java 程序那样开发 hadoop 程序了。

下面做一个简单的测试:

(一)  第 1 步:新建项目。

File–>New–>Other–>Map/Reduce Project

项目名可以随便取,如 WordCount。

复制 hadoop 安装目录 /src/example/org/apache/hadoop/example/WordCount.java 到刚才新建的项目下面。

在 Linux 上安装 Hadoop 之前,需要安装两个程序:

  1. JDK1.6 或者更高的版本;
  2. SSH(安全外壳协议),推荐安装 OpenSSH

下面简述一下安装这两个程序的原因:

Hadoop 使用 Java 开发的,Hadoop 的编译及 MapReduce 的运行都需要使用 JDK。

Hadoop 需要通过 SSH 来启动 salve 列表中各台主机的守护进程,因此 SSH 也是必须安装的,即使是安装伪分布式版本(因为 Hadoop 并没有区分集群式和伪分布式)。对于伪分布式,Hadoop 会采用与集群相同的处理方式,即依次序启动文件 conf/slaves 中记载的主机上进程,只不过伪分布式中 salves 为 localhost(自身),所以对于伪分布式 Hadoop,SSH 一样是必须的。

1  安装 JDK1.7
Linux 会自带 JDK,如果不使用自带版本的话需要卸载。

(一)  卸载系统自带的 jdk 版本

查看自带的 jdk

#rpm -qa | grep gcj

看到如下信息:

libgcj-4.1.2-44.el5

java-1.4.2-gcj-compat-1.4.2.0-40jpp.115

使用 rpm -e –nodeps 命令删除上面查找的内容:

#rpm -e –nodeps java-1.4.2-gcj-compat-1.4.2.0-40jpp.115

(二)  卸载 rpm 安装的 jkd 版本

查看安装的 jdk:

#rpm -qa|grep jdk

看到如下信息:

java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5

卸载:

#rpm -e –nodeps java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5

(三)  安装 jdk

首先到 sun 官网下载安装包,下面是最新的安装包 http://java.sun.com/javase/downloads/index.jsp

如果希望找以前的版本,到下面的地址可以找到 http://java.sun.com/products/archive/

有 jdk-6u7-linux-i586-rpm.bin 和 jdk-6u7-linux-i586.bin 两种版本。bin 是二进制包,而 rpm 是 RedHat package 就是红帽的标准安装包。区别就是 rpm 安装的时候给你自动配置,一般都是 lib 安装到 /usr/lib,bin 安装到 /usr/bin 下边,就算不是,在 /usr/bin 下也要建立一个软连接。

下边以现有最新版本 jdk-7u3-linux-i586.rpm 为例进行安装:

将安装文件放到:/usr/java 目录下,修改权限,命令如下(需先用 cd 命令切换到相应目录下):

# chmod +x  jdk-7u3-linux-i586.rpm

执行文件的安装:

# rpm-ivh jdk-7u3-linux-i586.rpm

(四)  配置环境变量

修改 /etc/profile 文件,在该文件最后加上

export JAVA_HOME=/usr/java/jdk1.7.0_03

export PATH=$PATH: /usr/java/jdk1.7.0_03/bin

保存

(五)  执行

cd /etc

source profile

(六)  验证 JDK 是否安装成功

[root@localhost ~]# java -version

java version “1.7.0”

Java(TM) SE Runtime Environment (build 1.7.0-b147)

Java HotSpot(TM) Server VM (build 21.0-b17, mixed mode)

2  配置 SSH 免密码登陆
首先,确保当前可以连接到互联网。在 root 下修改 /etc/ssh/sshd_config 文件(客户端、服务器都需要更改),将

#AuthorizedKeysFile  .ssh/authorized_keys

前面的#号去掉,即启用

AuthorizedKeysFile  .ssh/authorized_keys

如果需要 root 也能 ssh 登录,把“#PermitRootLogin yes”前面的#号也去掉。

同样 root 账户下,重启 sshd 服务使之生效

/etc/rc.d/init.d/sshd  restart

客户端中,切换到需要 ssh 登录的帐户下:

ssh-keygen  -t  dsa 

产生公私钥对。回车,采用默认文件保存钥匙。

xxxxx 回车  键入密码短语,直接回车为不建立密码短语。密码短语至少 5 个字符

xxxxx 回车  重复密码短语,直接回车为不建立密码短语

也可以:

ssh-keygen  -t  dsa  -P  ‘ ‘  -f  /home/ 账户名 /.ssh/id_dsa 

ssh-keygen 代表生成密钥;-t(注意区分大小写)表示指定生成的迷密钥类型;dsa 是 dsa 密钥认证的意思,即密钥类型;- P 用于提供密语;- f 指定生成的密钥文件。这个

公私钥产生在此账户的.ssh 目录中,id_dsa 为私钥,id_dsa.pub 为公钥

服务器中,切换到需要 ssh 登录的帐户下:

如果服务器中尚未建立公私钥对,那么首先按照客户端的方法建立公私钥对

scp  账户名 @客户端主机名或 ip 地址:/home/ 帐户名 /.ssh/id_dsa.pub  /home/ 帐户名 /

将客户端账户的公钥拷到服务器中。客户端用主机名或 ip 地址均可,但是需与 ssh 登录命令相符,建议将主机名与 ip 地址写入 /etc/hosts 中,此处用主机名即可(下同)。

yes  将客户端写入 known_hosts 中

输入客户端中的账户密码完成复制

将 id_rsa.pub 中的内容添加到 authorized_keys 文件中,authorized_keys 文件名需与 sshd_config 中的设置相符

cat  /home/ 帐户名 /id_rsa.pub  >>/home/ 帐户名 /.ssh/authorized_keys

修改 authorized_keys 文件的权限,至少为 644,也可更为严格(600),不修改的话 ssh 无密码登录不起作用:

chmod  644  /home/ 帐户名 /.ssh/authorized_keys 

客户端中,切换到需要 ssh 登录的帐户下:

ssh  服务器主机名  – 登录服务器,若在服务器与客户端中的帐户名不同,则

ssh  帐户名 @服务器主机名

yes  – 将服务器写入 known_hosts 中

若产生公私钥时设置了密码短语,还需要输入密码短语,为了方便,可在客户端中 ssh-add,然后输入密码短语,下次再 ssh 登录,无需再输入密码短语。

验证:

[test@localhost ~]$ ssh -version

OpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008

Bad escape character ‘rsion’.

显示 SSH 已经安装成功了。输入命令:

ssh localhost

会有如下显示:

[test@localhost .ssh]$ ssh localhost

The authenticity of host ‘localhost (127.0.0.1)’ can’t be established.

RSA key fingerprint is 2b:36:6b:23:4d:e4:71:2b:b0:79:69:36:0e:65:3b:0f.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘localhost’ (RSA) to the list of known hosts.

 

Last login: Tue Oct 30 13:08:33 2012 from localhost.localdomain

这说明已经安装成功,第一次登录时会询问你是否继续链接,输入 yes 即可进入。

实际上,在 Hadoop 的安装过程中,是否无密码登陆是无关紧要的,但是如果不配置无密码登录,每次启动 Hadoop,都需要输入密码以登陆到每台机器的 DataNode 上,考虑到一般的 Hadoop 集群动辄数百台或上千台机器,因此一般来说都会配置 SSH 的无密码登录。

关于公私钥对的一点理解:公私钥对就像是一套钥匙和锁,公钥是锁,私钥是钥匙。私钥留在客户端中,公钥发给服务器。服务器可以有很多把锁,客户端只有一把钥匙。当客户端 ssh 登录服务器时,服务器会找到这个客户端发的锁,然后跟客户端要钥匙,如果钥匙是配套的,那么登录成功,反之登录失败。当然,以上是针对同一个用户说的,不同用户的公私钥对也不同,而且每次 ssh-keygen 产生的公私钥对也不同。

备注将普通用户修改为超级用户的方法:

l  进入超级用户模式。也就是输入 ”su -“, 系统会让你输入超级用户密码,输入密码后就进入了超级用户模式。

l  添加文件的写权限。也就是输入命令 ”chmod u+w /etc/sudoers”。

l  编辑 /etc/sudoers 文件。也就是输入命令 ”vim /etc/sudoers”, 输入 ”i” 进入编辑模式,找到这一行:”root ALL=(ALL) ALL” 在起下面添加 ”xxx ALL=(ALL) ALL”(这里的 xxx 是你的用户名),然后保存(就是先摁一下 Esc 键,然后输入 ”:wq”)退出。

l  撤销文件的写权限。也就是输入命令 ”chmod u-w /etc/sudoers”。

3  安装并运行 Hadoop
先介绍一下 Hadoop 对各个节点的角色意义:

Hadoop 分别从三个角度将主机划分为两种角色。第一,划分为 master 和 salve,即主人与奴隶;第二,从 HDFS 的角度,将主机划分为 NameNode 和 DataNode(在分布式文件系统中,目标的管理很重要,管理目录的就相当于主人,而 NameNode 就是目录管理者);第三,从 MapReduce 的角度,将主机划分为 JobTracker 和 TaskTracker(一个 job 经常被划分为多个 task,从这个角度不难理解它们之间的关系)。

Hadoop 有官方发行版与 cloudera 版,其中 cloudera 版是 Hadoop 的商用版本。下面介绍 Hadoop 官方发行版的安装方法。

Hadoop 有三种运行方式:单节点方式、单击伪分布方式与集群方式。乍看之下,前两种方式并不能体现云计算的优势,在实际应用中并没有什么意义,但是在程序的测试与调试过程中,他们还是很有意义的。

可以通过下面的地址下载获得 Hadoop 的官方发行版:

http://www.apache.org/dist/hadoop/core/

下载 hadoop-1.0.4.tar.gz 并将其解压,解压到用户目录下:/home/[用户]/

tar -xzvf  hadoop-1.0.4.tar.gz

l  单节点方式配置

安装单节点的 Hadoop 无须配置,在这种方式下,Hadoop 被认为是一个单独的 java 进程,这种方式经常用来测试。

l  伪分布式配置

可以把伪分布式的 Hadoop 看作是一个节点的集群,在这个集群中,这个节点既是 master,也是 salve;既是 NameNode 也是 DataNode;既是 JobTracker,也是 TaskTracker。

伪分布式的配置过程也很简单,只需要修改几个文件,如下所示。

进入 conf 文件夹(在解压缩的目录下),修改配置文件。

[test@localhost conf]$ pwd

/home/test/hadoop-1.0.4/conf

[test@localhost conf]$ ls hadoop-env.sh

hadoop-env.sh

[test@localhost conf]$ vim hadoop-env.sh

添加内容:

export JAVA_HOME=/usr/java/jdk1.7.0

指定 JDK 的安装位置

[test@localhost conf]$ pwd

/home/test/hadoop-1.0.4/conf

[test@localhost conf]$ ls core-site.xml

core-site.xml

修改文件

[test@localhost conf]$ vim core-site.xml

添加内容:

<configuration>

  <property>

      <name>fs.default.name</name>

      <value>hdfs://localhost:9000</value>

  </property>

</configuration>

这是 hadoop 核心的配置文件,这里配置的是 HDFS 的地址和端口号。

[test@localhost conf]$ ls hdfs-site.xml

hdfs-site.xml

修改文件:

<configuration>

  <property>

    <name>dfs.replication</name>

    <value>1</value>

  </property>

</configuration>

这是 Hadoop 中的 HDFS 的配置,配置的备份方式默认为 3,��单机版的 Hadoop 中,需要将其改为 1.

[test@localhost conf]$ ls mapred-site.xml

mapred-site.xml

[test@localhost conf]$ vim mapred-site.xml

修改文件:

<configuration>

  <property>

      <name>mapred.job.tracker</name>

      <value>localhost:9001</value>

  </property>

</configuration>

这是 Hadoop 中 MapReduce 的配置文件,配置的是 JobTracker 的地址和端口。

需要注意的是,如果安装的是 0.20 之前的版本,那么只有一个配置文件,即为 Hadoop-site.xml。

接下来,在启动 Hadoop 前,需格式化 Hadoop 的文件系统 HDFS(这点与 Windows 是一样的,重新分区后的卷总是要格式化的)。进入 Hadoop 文件夹,输入下面的命令:

[test@localhost hadoop-1.0.4]$  bin/hadoop namenode -format

12/11/01 00:20:50 INFO namenode.NameNode: STARTUP_MSG:

 

Re-format filesystem in /tmp/hadoop-test/dfs/name ? (Y or N) Y

12/11/01 00:20:55 INFO util.GSet: VM type      = 32-bit

12/11/01 00:20:55 INFO util.GSet: 2% max memory = 17.77875 MB

12/11/01 00:20:55 INFO util.GSet: capacity      = 2^22 = 4194304 entries

12/11/01 00:20:55 INFO util.GSet: recommended=4194304, actual=4194304

12/11/01 00:20:55 INFO namenode.FSNamesystem: fsOwner=test

12/11/01 00:20:55 INFO namenode.FSNamesystem: supergroup=supergroup

12/11/01 00:20:55 INFO namenode.FSNamesystem: isPermissionEnabled=true

12/11/01 00:20:55 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100

12/11/01 00:20:55 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)

12/11/01 00:20:55 INFO namenode.NameNode: Caching file names occuring more than 10 times

12/11/01 00:20:56 INFO common.Storage: Image file of size 110 saved in 0 seconds.

12/11/01 00:20:56 INFO common.Storage: Storage directory /tmp/hadoop-test/dfs/name has been successfully formatted.

12/11/01 00:20:56 INFO namenode.NameNode: SHUTDOWN_MSG:

 

格式化文件系统,接下来启动 Hadoop。

首先赋予 test 用户 hadoop 文件夹的使用权限:

[test@localhost ~]$ chown -hR test /home/test/hadoop-1.0.4

输入命令:

[test@localhost hadoop-1.0.4]$ bin/start-all.sh

starting namenode, logging to /home/test/hadoop-1.0.4/libexec/../logs/hadoop-test-namenode-localhost.localdomain.out

localhost: starting datanode, logging to /home/test/hadoop-1.0.4/libexec/../logs/hadoop-test-datanode-localhost.localdomain.out

localhost: starting secondarynamenode, logging to /home/test/hadoop-1.0.4/libexec/../logs/hadoop-test-secondarynamenode-localhost.localdomain.out

starting jobtracker, logging to /home/test/hadoop-1.0.4/libexec/../logs/hadoop-test-jobtracker-localhost.localdomain.out

localhost: starting tasktracker, logging to /home/test/hadoop-1.0.4/libexec/../logs/hadoop-test-tasktracker-localhost.localdomain.out

利用 jps 查看已经启动的服务:

[test@localhost ~]$ cd /home/test/hadoop-1.0.4

[test@localhost hadoop-1.0.4]$ jps

[test@localhost hadoop-1.0.4]$ jps

12657 SecondaryNameNode

12366 NameNode

12995 Jps

12877 TaskTracker

12739 JobTracker

12496 DataNode

最后,验证 Hadoop 是否安装成功。打开浏览器,分别输入网址:

http://localhost:50070/(HDFS 的 Web 页面)

http://localhost:50030/(MapReduce 的 Web 页面)

如果都能看到,说明 Hadoop 已经安装成功。对于 Hadoop 来说,安装 MapReduce 及 HDFS 都是必须的,但是如果有必要,依然可以只启动 HDFS 或者 MapReduce:

[test@localhost hadoop-1.0.4]$ bin/start-dfs.sh

[test@localhost hadoop-1.0.4]$ bin/start-mapred.sh

Ubuntu14.04 下 Hadoop2.4.1 单机 / 伪分布式安装配置教程  http://www.linuxidc.com/Linux/2015-02/113487.htm

CentOS 安装和配置 Hadoop2.2.0  http://www.linuxidc.com/Linux/2014-01/94685.htm

Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm

Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm

Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm

Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm

单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2015-07/120247p2.htm

(二)  第 2 步:上传模拟数据文件夹。

为了运行程序,我们需要一个输入的文件夹,和输出的文件夹。

在本地新建 word.txt

java c++ python c

java c++ javascript

helloworld Hadoop

mapreduce java hadoop hbase

通过 hadoop 的命令在 HDFS 上创建 /tmp/workcount 目录,命令如下:

[test@localhost hadoop-1.0.4]$ bin/hadoop fs -mkdir /tmp/wordcount/

通过 copyFromLocal 命令把本地的 word.txt 复制到 HDFS 上,命令如下:

[test@localhost hadoop-1.0.4]$ bin/hadoop fs -copyFromLocal /tmp/word.txt  /tmp/wordcount/word.txt

/tmp/word.txt 是本地创建 txt 文件的路径,/tmp/wordcount/word.txt 是 HDFS 上的路径。

(三)  第 3 步:运行项目

在新建的项目 WordCount,点击 WordCount.java,右键 –>Run As–>Run Configurations

在弹出的 Run Configurations 对话框中,点 Java Application,右键 –>New,这时会新建一个 application 名为 WordCount

配置运行参数,点 Arguments,在 Program arguments 中输入“你要传给程序的输入文件夹和你要求程序将计算结果保存的文件夹”,如:

hdfs://localhost:9000/tmp/wordcount/word.txt  hdfs:// localhost:9000/tmp/wordcount/out

如果运行时报 java.lang.OutOfMemoryError: Java heap space 配置 VM arguments(在 Program arguments 下)

-Xms512m -Xmx1024m -XX:MaxPermSize=256m

在 Linux 下安装与配置 Hadoop

点击 Run,运行程序。

点击 Run,运行程序,过段时间将运行完成,等运行结束后,查看运行结果,使用命令:

[test@localhost hadoop-1.0.4]$ bin/hadoop fs -ls /tmp/wordcount/out

Found 2 items

-rw-r–r–  3 test supergroup          0 2012-11-01 11:32 /tmp/wordcount/out/_SUCCESS

-rw-r–r–  3 test supergroup        81 2012-11-01 11:32 /tmp/wordcount/out/part-r-00000

查看例子的输出结果,发现有两个文件,使用命令查看 part-r-00000 文件,可以查看运行结果。

[test@localhost hadoop-1.0.4]$ bin/hadoop fs -cat /tmp/wordcount/out/part-r-00000

c      1

c++    2

hadoop  2

hbase  1

helloworld      1

java    3

javascript      1

mapreduce      1

python  1

删除到运行结果:

[test@localhost hadoop-1.0.4]$ bin/hadoop fs -rmr /tmp/wordcount/out

Deleted hdfs://localhost:9000/tmp/wordcount/out

再次 Run 程序后查看结果:

[test@localhost hadoop-1.0.4]$ bin/hadoop fs -ls /tmp/wordcount/out

Found 2 items

-rw-r–r–  3 test supergroup          0 2012-11-01 11:37 /tmp/wordcount/out/_SUCCESS

-rw-r–r–  3 test supergroup        81 2012-11-01 11:37 /tmp/wordcount/out/part-r-00000

[test@localhost hadoop-1.0.4]$ bin/hadoop fs -cat /tmp/wordcount/out/part-r-00000

c      1

c++    2

hadoop  2

hbase  1

helloworld      1

java    3

javascript      1

mapreduce      1

python  1

5  Hadoop 包介绍
Hadoop API 被分成如下几种主要的包(package):

org.apache.hadoop.conf

定义了系统参数的配置文件处理 API

org.apache.hadoop.fs

定义了抽象的文件系统 API

org.apache.hadoop.dfs

Hadoop 分布式文件系统(HDFS)模块的实现

org.apache.hadoop.io

定义了通用的 I /O API,用于针对网络,数据库,文件等数据对象做读写操作

org.apache.hadoop.ipc

用于网络服务端和客户端的工具,封装了网络异步 I / O 的基础模块

org.apache.hadoop.mapred

Hadoop 分布式计算系统(MapReduce)模块的实现,包括任务的分发调度等

org.apache.hadoop.metrics

定义了用于性能统计信息的 API,主要用于 mapred 和 dfs 模块

org.apache.hadoop.record

定义了针对记录的 I /O API 类以及一个记录描述语言翻译器,用于简化将记录序列化成语言中性的格式(language-neutral manner)

org.apache.hadoop.tools

定义了一些通用的工具

org.apache.hadoop.util

定义了一些公用的 API

更多 Hadoop 相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-07/120247.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计21893字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中