歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> 通過win7eclipse連接虛擬機redhat上hadoop的實現(上)

通過win7eclipse連接虛擬機redhat上hadoop的實現(上)

日期:2017/3/1 13:39:41   编辑:關於Linux

目標: 利用本機(Win7)上的eclipse對虛擬機(redhat)上的Hadoop進行操作,實現學習和實驗的目的

大體工作流程之Hadoop安裝部分:

1、實現linux的ssh無密碼驗證配置.

2、在linux下安裝jdk,並配好環境變量

3、修改linux的機器名,並配置 /etc/hosts

4、在windows下下載hadoop 0.20.0,並修改hadoop-env.sh,core-site.xml,hdfs-site.xml, mapred-site.xml,masters,slaves文件的配置

5、把修改好的hadoop整個文件夾傳到linux下

6、把hadoop的bin加入到環境變量

7、格式化hadoop,啟動hadoop

8、驗證是否啟動,並執行wordcount

具體過程:

在linux命令行裡輸入:ssh-keygen -t rsa,然後一路回車。

ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/zhangtao/.ssh/id_rsa): //密鑰保存位置,直接回車保持默認; Created directory '/home/zhangtao/.ssh'.
Enter passphrase (empty for no passphrase): //設置密鑰的密碼,空密碼直接回車即可; Enter same passphrase again: //確認上一步設置的密碼。
然後進入 /root/.ssh/下面,會看到兩個文件 id_rsa.pub,id_rsa,
然後執行 cp id_rsa.pub authorized_keys
然後 ssh localhost 驗證是否成功,第一次要你輸入yes,以後就不需要了。

二 安裝JDK 並配置環境變量

之前的博文中已經由此內容,此處略過

三、修改linux機器名
先說說怎麼查看linux下的機器名
在命令行裡輸入hostname回車,展現的即當前linux系統的機器名如下 [root@hadoopName ~]# hostname hadoopName
[root@hadoopName ~]#
讀者也看到了,命令行的前綴 [root@hadoopName ~], @符號後面的就是機器名,前面的是當前用戶名 下面說說怎麼修改redhat linux下的機器名,下面的方法只適合修改redhat的,別的版本改機器名不是這樣的

1、執行 cd /etc/sysconfig,進入/etc/sysconfig 目錄下

2、執行 vi network,修改network文件, NETWORKING=yes HOSTNAME=hadoopName

把HOSTNAME改成你想要的機器名,我改成了hadoopName,然後保存

3、執行 cd /etc,進入/etc 目錄下

4、執行vi hosts,修改hosts文件
# Do not remove the following line, or various programs # that require network functionality will fail.

192.168.125.131 hadoopName hadoopName

127.0.0.1 localhost.localdomain localhost
默認是只有黑色字體內容,然後加上紅色字體內容,第一個是自身ip,第二個network裡的hostname名字,第三個一樣。網上很多資料說hadoop安裝要在 hosts裡面加入 所有的集群機器的 ip hostname 對,嗯,沒錯,因為筆者這是單機,所以就只加自己就行了。
5、修改完後,執行hostname 就能看到自己新改的機器名了 (實際上可能需要reboot)

四、在windows下下載hadoop 0.20.0,並修改hadoop-env.sh,core-site.xml,hdfs-site.xml,
mapred-site.xml,masters,slaves文件的配置
下面要做最重要的操作,下載hadoop,並修改配置文件
下載hadoop 0.20.0 版本 ,下載後的文件是hadoop-0.20.2.tar.gz,然後解壓出來

解壓出來後的文件結構是這樣的,進入conf目錄裡面, 修改hadoop-env.sh文件,加入如下一行
export JAVA_HOME=/usr/java/jdk1.6.0_03
其實hadoop-env.sh裡面有這一行,默認是被注釋的,你只需要把注釋去掉,並且把JAVA_HOME 改成你的java安裝目錄即可。
需要說一下,在0.20.2版本之前,conf裡面有一個 hadoop-site.xml文件,在0.20.0版本裡面 conf下沒有這個hadoop-site.xml文件,取而代之的是三個文件,core-site.xml,hdfs-site.xml,mapred.xml。下面要修改這三個文件 修改core-site.xml

默認的core-site.xml是如下這樣的
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl"
href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> </configuration>
現在要改成如下
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl"
href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/hadooptmp</value> <description>A base for other temporary directories.</description> </property> <property> <name>fs.default.name</name>
<value>hdfs://192.168.133.128:9000</value> <description>The name of the default file system. A URI whose scheme and authority determine the FileSystem implementation. The uri's scheme determines the config property (fs.SCHEME.impl) naming the FileSystem implementation class. The uri's authority is used to determine the host, port, etc. for a filesystem.</description> </property> </configuration>
修改hdfs-site.xml
默認的hdfs-site.xml是如下這樣的
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl"
href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> </configuration>
要改成如下這樣的
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl"
href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>dfs.replication</name> <value>1</value> <description>Default block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time. </description> </property> </configuration>
修改mapred-site.xml
默認的mapred-site.xml是如下這樣的
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl"
href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. -->
<configuration>
</configuration>
要改成如下這樣的
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl"
href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property>
<name>mapred.job.tracker</name> <value>192.168.133.128:9001</value> <description>The host and port that the MapReduce job tracker runs at. If "local", then jobs are run in-process as a single map and reduce task. </description> </property> </configuration>

修改完這三個文件了,就一些注意的要點說一下
1、其實core-site.xml 對應有一個core-default.xml, hdfs-site.xml對應有一個hdfs-default.xml,
mapred-site.xml對應有一個mapred-default.xml。這三個defalult文件裡面都有一些默認配置,現在我們修改這三個site文件,目的就覆蓋default裡面的一些配置,
2、hadoop分布式文件系統的兩個重要的目錄結構,一個是namenode上名字空間的存放地方,一個是datanode數據塊的存放地方,還有一些其他的文件存放地方,這些存放地方都是基於hadoop.tmp.dir目錄的,比如namenode的名字空間存放地方就是 ${hadoop.tmp.dir}/dfs/name, datanode數據塊的存放地方就是 ${hadoop.tmp.dir}/dfs/data,

所以設置好hadoop.tmp.dir目錄後,其他的重要目錄都是在這個目錄下面,這是一個根目錄。我設置的是 /usr/local/hadoop/hadooptmp,當然這個目錄必須是存在的。
3、fs.default.name,這個是設置namenode位於哪個機器上,端口號是什麼hdfs://192.168.125.131:9000,格式一定要這樣寫,網上很多資料說ip地址寫localhost也行,筆者建議最好寫ip,因為後期講到windows下 eclipse連接hadoop 的時候,如果寫localhost,就會連接不到。
4、mapred.job.tracker,這個是設置jobtracker位於哪個機器上,端口號是什麼,192.168.125.131:9001,格式和上一個不一樣,這個也必須這樣寫,同樣localhost和ip的分別和上述一樣
5、dfs.replication,這個是設置數據塊的復制次數,默認是3,因為筆者這裡就一台機器,所以只能存在一份,就改成了1然後修改 masters和slaves文件
master文件裡就把集群中的namenode所在的機器ip,這裡就寫 192.168.125.131, 不要寫localhost,寫了localhost,windows 下eclipse 連接不到hadoop
slaves文件裡就把集群中所有的nodedata所在的機器ip,這裡就寫192.168.125.131,因為這裡是單機,同樣最好別寫localhost

linux

所以設置好hadoop.tmp.dir目錄後,其他的重要目錄都是在這個目錄下面,這是一個根目錄。我設置的是 /usr/local/hadoop/hadooptmp,當然這個目錄必須是存在的。
3、fs.default.name,這個是設置namenode位於哪個機器上,端口號是什麼hdfs://192.168.133.128:9000,格式一定要這樣寫,網上很多資料說ip地址寫localhost也行,筆者建議最好寫ip,因為後期講到windows下 eclipse連接hadoop 的時候,如果寫localhost,就會連接不到。
4、mapred.job.tracker,這個是設置jobtracker位於哪個機器上,端口號是什麼,192.168.133.128:9001,格式和上一個不一樣,這個也必須這樣寫,同樣localhost和ip的分別和上述一樣
5、dfs.replication,這個是設置數據塊的復制次數,默認是3,因為筆者這裡就一台機器,所以只能存在一份,就改成了1然後修改 masters和slaves文件
master文件裡就把集群中的namenode所在的機器ip,這裡就寫 192.168.133.128, 不要寫localhost,寫了localhost,windows 下eclipse 連接不到hadoop
slaves文件裡就把集群中所有的nodedata所在的機器ip,這裡就寫192.168.133.128,因為這裡是單機,同樣最好別寫localhost

五、把修改好的hadoop整個文件夾傳到linux下
上述文件修改好之後,把haoop整個目錄copy草linux下,記得建個目錄放這個,我建的目錄是 /usr/local/hadoop,把hadoop的整個目錄copy到這個下面,然後就是這樣的形式 [root@hadoopName hadoop]# cd /usr/local/hadoop [root@hadoopName hadoop]# ls hadoop-0.20.2 hadooptmp
/usr/local/hadoop 下有兩個文件,一個就是hadoop的根目錄hadoop-0.20.2,另一個,就是上述的hadoop.tmp.dir的目錄

六、把hadoop的bin加入到環境變量
把hadoop的執行命令加到環境變量裡,這樣就能直接在命令行裡執行hadoop的命令了

操作跟把java的bin加入環境變量一樣

1、執行 cd /etc, 進入/etc 目錄下。

2、執行 vi profile, 修改profile文件 在裡面加入以下

export PATH=/usr/local/hadoop/hadoop-0.20.2/bin:$PATH

3、執行 chmod +x profile ,把profile變成可執行文件

4、執行 source profile,把profile裡的內容執行生效

7、格式化hadoop,啟動hadoop
格式化hadoop
在命令行裡執行,hadoop namenode -format,

啟動hadoop
在命令行裡執行,start-all.sh,或者執行start-dfs.sh,再執行start-mapred.sh。

如果出現權限問題 chmod 777 文件名 賦予權限

在命令行裡輸入 jps,如果出現一下內容,則說明啟動成功。

不成功的話(command not found), 將java bin 加入到環境變量PATH中

[root@hadoopName ~]# jps

4505 NameNode
4692 SecondaryNameNode

4756 JobTracker

4905 Jps

4854 TaskTracker

4592 DataNode
啟動之後,在/usr/local/hadoop/hadooptmp 下的dfs文件夾裡會生成 data目錄,這裡面存放的是datanode上的數據塊數據,因為筆者用的是單機,所以name 和 data 都在一個機器上,如果是集群的話,namenode所在的機器上只會有name文件夾,而datanode上只會有data文件夾。
執行 hadoop fs -ls命令,查看當前hdfs分布式文件系統的 文件目錄結構,剛執行會說no such dictionary,
你要先建一個文件夾,用命令 haoop fs -mkdir testdir ,然後再執行hadoop fs -ls,就會展示/user/root/testdir 當前用戶是root,所以hdfs的根目錄就是 /user/root。其實也可以在虛擬機上裝n個。

Copyright © Linux教程網 All Rights Reserved