日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

大数据初级笔记二:Hadoop入门之Hadoop集群搭建

發(fā)布時間:2024/9/5 编程问答 27 如意码农
生活随笔 收集整理的這篇文章主要介紹了 大数据初级笔记二:Hadoop入门之Hadoop集群搭建 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Hadoop集群搭建

  把環(huán)境全部準備好,包括編程環(huán)境。

  • JDK安裝

版本要求:

  強烈建議使用64位的JDK版本,這樣的優(yōu)勢在于JVM的能夠訪問到的最大內(nèi)存就不受限制,基于后期可能會學習到Spark技術(shù),所以建議在搭建系統(tǒng)環(huán)境的時候把JDK的版本安裝為64位。

如果已經(jīng)安裝,在你不確定安裝的版本情況下,可以使用如下方式查看:快捷鍵WIN+R,調(diào)出DOS窗口,然后輸入java –version就可以了,如圖所示:

  • IDEAK編程工具安裝

破解工具:IDEAKeyTool.jar

  使用的方法:打開DOS,然后輸入用戶名USER_NAME即可獲取秘鑰。將計算好的秘鑰輸入到IDEA當中安裝即可。

1:將maven加入到IDEA當中,如果有安裝maven

2:將jdk加入到IDEA當中,否則編寫的程序報錯

3:改變字體的大小,含代碼區(qū)域和控制臺

4:改變編碼,否則默認新建的java文件的編碼是GBK

  • Maven安裝

安裝包:已經(jīng)下載好了,如果在mvn –version出現(xiàn)部分報錯,由于windows的權(quán)限問題導致的,參照`讀我.txt`解決該問題,如果你使用管理員權(quán)限,也可以直接解決該報錯問題。

環(huán)境變量的添加:%PATH%

查看maven是否正常安裝:mvn –version

前提條件下,你的JDK正常安裝并且已經(jīng)加入系統(tǒng)環(huán)境變量。

Maven中央倉庫:http://search.maven.org/

Maven本地倉庫:C:\Users\hasee\.m2\repository

先本地查找,然后沒有再聯(lián)網(wǎng)到中央倉庫查找需要的依賴,實際上Linux的RPM包也有它的中央倉庫,我們用yum安裝的時候其實就是通過中央倉庫來完成所有的依賴構(gòu)建的。

RPM包中央倉庫:http://rpmfind.net/

Maven配置文件講解:

<groupId>MLlibLearnging</groupId><!--項目組唯一標識-->
<artifactId>MLlib</artifactId><!--項目唯一標識-->
<version>1.0-SNAPSHOT</version><!--版本-->
假設上面是我們創(chuàng)建的Mavne工程項目的配置文件的坐標,如果你想要在本地的倉庫中看到這個,那么必須先將其install即可。具體的做法如下:

當我們構(gòu)建Maven的時候,如果出現(xiàn)報錯,比如出現(xiàn)MojoExecutionException報錯的情況下,請參考如下方法自行解決:

參考資料:

官方資料說明:https://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

其它資料說明:

http://stackoverflow.com/questions/23235430/maven-mojoexecutionexception

http://stackoverflow.com/questions/2619584/how-to-set-java-home-on-windows-7

解決說明:主要是JDK的環(huán)境變量配置問題導致出錯。

正常Install后,我們就可以看見我們自己構(gòu)建的maven項目出現(xiàn)在本地的文件庫了。

<groupId>MLlibLearnging</groupId>
<artifactId>MLlib</artifactId>
<version>1.0-SNAPSHOT</version>
上面的用本地文件庫的地址表示就是:

C:\Users\hasee\.m2\repository\MLlibLearnging\MLlib\1.0-SNAPSHOT

  通過查詢本地庫,可以發(fā)現(xiàn)組ID,項目唯一ID,和版本號在本地倉庫的路徑關系。可以肯定的是,如果install后,那么本地倉庫當中會出現(xiàn)我們自己構(gòu)建的maven項目工程,如果以后我們自己需要引用到我們自己構(gòu)建的maven項目,那么,我們也可以按照常規(guī)的引用方式去引用,那么maven會先在本地的倉庫當中查找,先從組ID查找,然后再從項目唯一ID查找,然后再通過版本號確定具體的版本,然后找到對應的jar文件即可。

  • 虛擬機安裝

  • Linux安裝及基本命令運用

    • 鏡像安裝

    • 文件基本操作

增刪改查:

創(chuàng)建文件:touch,vim,mkdir

移動和修改文件名:mv

刪除文件:rm –rf(強制刪除)

復制文件:cp 復制目錄加-R,R表示recursive,具體可以查看man cp

退回上一級目錄:cd ..(注意,cd后面要空格,否則語法錯誤)

查看:cat,more,tail,head

tail的動態(tài)顯示:tail –F

查詢倒數(shù)第N行數(shù)據(jù):tail –n N 文件

查詢前面第N行數(shù)據(jù):head –n N 文件  --àhead -n 10 services

注意,上面的 –n可以省略不寫,直接寫成head 10 services 或者tail 10 services

解壓:tar –xvzf

壓縮:tar –cvzf ,壓縮的時候,注意格式是tar –cvzf test.tar.gz test,這里表示是壓縮test,而不要寫反了,比如寫成tar –cvzf test test.tar.gz是錯誤的。

幫助命令:--help,whatis,man,info命令

具體用法如下:info cp /man cp /whatis cp /cp –help,注意當我們進入到幫助文檔的時候,我們按Q鍵退出,而不是ESC。

模式匹配命令:grep,它會匹配該行出現(xiàn)的字符grep查詢一個文件,例如: [root@hdfs ~]# grep root /etc/passwd。

管道符: | ,它的作用就是把左邊的輸出當做右邊的輸入

具體用法:cat /etc/rpc|grep nfsd

軟鏈接和硬鏈接:

  仔細對比上面的,d表示的是目錄,l表示的就是軟鏈接。軟鏈接類似于快捷鍵,但不能跨分區(qū)存在,硬鏈接和源文件的inodes是一樣的,而linux的文件都是以inodes來進行標識的,inodes相同,

會被linux內(nèi)核認為是同一個文件,這也就意味著如果源文件有硬鏈接,當我們往源文件寫數(shù)據(jù)的時候,硬鏈接也會更新。注意,創(chuàng)建軟鏈接或者是硬鏈接的時候,生成的文件是不能存在的,

否則報錯(ls -i)。

硬鏈接的創(chuàng)建:ln 1.txt 2.txt   我們可以查看生成的2.txt和1.txt的inodes是否一致,查看方式:ls –I

軟鏈接的創(chuàng)建:ln –s 1.txt 2.txt  查看ll即可

實驗場景:

創(chuàng)建循環(huán)語句往源文件里面寫數(shù)據(jù):while (true); do  echo 'i love bigdata ' >> 1.txt; sleep 1; done

打開一個窗口,然后動態(tài)的輸出硬鏈接的文件內(nèi)容:tail -F 2.txt

通過這個實驗可以發(fā)現(xiàn),往源文件里面寫入的數(shù)據(jù)也會同步更新到硬鏈接的文件當中。

    • 文件權(quán)限基本操作

查看文件的所有者、所屬組和其他人。命令ll

注意區(qū)分目錄和文件的可讀可寫可執(zhí)行的問題。

問題:文件可以讀,是不是意味著可以刪除這個文件?

所以如果文件可以讀,只是代表這個文件可以被修改,但是至于這個文件能不能被刪除,不是由文件本身決定的,而是由它所在---的目錄的權(quán)限來決定的。

    • 用戶管理

用戶信息文件: /etc/passwd

每一行都是一個用戶的信息文件

root:x:0:0:root:/root:/bin/bash

用戶名:密碼:用戶標志號:缺省組標志號:存放用戶全名等信息:用戶登錄系統(tǒng)后的缺省目錄:用戶使用的hsell,默認為bash

備注:

1:密碼位其實并沒有存放密碼的,因為passwd的權(quán)限為644

2:區(qū)別超級用戶的是UID,如果UID=0,則為超級用戶,root不一定是超級用戶,它只是一個名稱罷了

3:偽用戶UID=1-499,普通用戶500-60000,

4:bin:x:1:1:bin:/bin:/sbin/nologin  //這個nologin表示該用戶是無法登錄的,很簡單,沒有shell命令解析器,就沒法把命令傳遞給內(nèi)核

密碼文件:/etc/shadow[批注1]

如果密碼被刪除,那么用戶不需要密碼直接登錄系統(tǒng),通過這個我們在忘記密碼的情況下,直接把用戶的密碼刪除,在重新設值即可。

bin:*:15980:0:99999:7:::

第4位為0表示不限定,如果為3,那么必須在3天之后才能修改密碼

第5位表示該密碼最大的有效期,如果設置為30,那么在30天后如果不修改密碼,那么直接登錄不了。這個可以強迫用戶修改密碼

第6位表示在上面的30天的前7天會警告用戶進行修改密碼

第7位表示賬戶的過期幾日后將永久停權(quán),0表示立即,-1表示永不

備注:pwconv,這個命令會把用戶設置的密碼會運行這個命令自動把密碼放到shadow的密碼位

用戶組文件:/etc/group

用戶組密碼文件:/etc/gshadow

用戶配置文件:/etc/login.defs

這里是一個用戶創(chuàng)建的缺省文件,它定義了用戶的郵箱,UID,GID的使用范圍,密碼的有效期,密碼有效最小長度等等信息

/etc/default/useradd

這個也是缺省文件

# useradd defaults file

GROUP=100

HOME=/home

INACTIVE=-1   //

EXPIRE=    //過期時間

SHELL=/bin/bash

SKEL=/etc/skel   //新添加的用戶存放的缺省路徑目錄

CREATE_MAIL_SPOOL=yes  //是否在pool目錄下創(chuàng)建該用戶同名的保存郵件的文件

新用戶信息文件:/etc/skel

這個文件是隱藏的.

[root@tourbis etc]# ls -a ./skel

.  ..  .bash_logout  .bash_profile  .bashrc  .gnome2  .mozilla  warning

這里面的的配置文件會自動拷貝到新用戶的家目錄下在你用useradd 用戶

登錄信息:/etc/motd

--message of the day表示今日消息的意思

這里只有在用戶登錄的時候才會把歡迎界面顯示在屏幕上,自定義

這里可以把一些消息寫在這里,那么任何用戶登錄時候都是可以看到這個消息

自定義歡迎桌面:/etc/issue

這里我們可以配置系統(tǒng)的啟動歡迎界面,自定義

創(chuàng)建新用戶:useradd 用戶名,給用戶添加密碼:passwd 用戶名

切換用戶:su 用戶名

如果是root用戶或者PID=0的用戶切入到普通用戶,則不需要輸入用戶密碼,如果是普通用戶切入到其他用戶,則必須輸入密碼。

添加用戶只能是PID=0的用戶才有資格。

更改文件的所屬權(quán)限:chown user:user 文件名

實驗操作:

創(chuàng)建用戶,并給定用戶名,在其家目錄下,用root用戶創(chuàng)建一個文件,定義文件的權(quán)限chmod 445和444,查看cd和ls的區(qū)別,理解透徹如果不是所屬者或者是所屬組,那么就是其他人這句話的含義。并理解文件和目錄權(quán)限所代表的意思。

刪除用戶:userdel 用戶名 或者是userdel –r 用戶名,加r表示斬草除根,抄家及有關于它的一切全部清除。

當我們刪除用戶的時候,如果刪除用戶的進程還是存在的時候,會出現(xiàn)這個報錯:userdel: user fuck is currently used by process 7607

這種情況最簡單的方式就是ctrl+D,退出然后再登錄即可刪除用戶了。

添加組和刪除組

添加一個系統(tǒng)不存在的組

添加用戶組:groupadd –g 888 web //表示添加一個GID=888的web組

刪除用戶組:groupdel

修改用戶組信息:groupmod

    • 文本編輯器

了解vi/vim文本編輯器

進入編輯器:

進入插入模式主要是a,i注意是小寫的,如果想在行首插入的時候,直接I,如果想在行尾的直接大A進入,如果想在行的上面插入O,如果想在行的下段插入o.

上面的a,I,o都是可以直接進入插入模式的。

定位模式:

其實 前面的I或者A,我們可以直接$或者0來完成定位操作。

H,J,K,L,H表示左移,L右移

gg表示到第一行,G表示最后一行,nG表示到第n行

設置行號:

命令:set nu 取消set nonu

    • Linux運行級別

打開vim /etc/inittab

查看當前運行級別:runlevel

查看運行級別將會啟動的運行程序:cd  /etc/rc.d

[root@tourbis init.d]# cd /etc/rc.d

[root@tourbis rc.d]# ls

init.d  rc  rc0.d  rc1.d  rc2.d  rc3.d  rc4.d  rc5.d  rc6.d  rc.local  rc.sysinit

比如我的運行級別為3,那么就是rc3.d,進入這個目錄:

[root@tourbis rc3.d]# ls
K01smartd K50dnsmasq K76ypbind K95rdma S11portreserve S24nfslock S28autofs S90crond
K02oddjobd K50kdump K84wpa_supplicant K99rngd S12rsyslog S24rpcgssd S50bluetooth S95atd
K05wdaemon K60nfs K87restorecond S01sysstat S13cpuspeed S25blk-availability S55sshd S99certmonger
K10psacct K61nfs-rdma K88sssd S02lvm2-monitor S13irqbalance S25cups S58ntpd S99local
K10saslauthd K69rpcsvcgssd K89netconsole S08ip6tables S13rpcbind S25netfs S64mysql
K15htcacheclean K73winbind K89rdisc S08iptables S15mdmonitor S26acpid S80postfix
K15httpd K75ntpdate K92pppoe-server S10network S22messagebus S26haldaemon S82abrt-ccpp
K30spice-vdagentd K75quota_nld K95firstboot S11auditd S23NetworkManager S26udev-post S82abrtd

里面的文件都是軟鏈接,主要分為2大類,K(kill)和S(start)

這里面的S里面的全部會啟動。數(shù)字表示啟動順序,理論上來說,越小優(yōu)先級越高,數(shù)字相同安裝腳本的創(chuàng)建順序來執(zhí)行。

    • 定時器crontab

作用:用于生成cron進程所需的crontab文件

crontab的命令格式:

----》crontab  -l |-r | -e

-l表示顯示當前的crontab,-r表示刪除當前的crontab,-e表示使用編輯器編輯當前的crontab

格式

分鐘  小時  天  月  星期  命令/腳本

1小時的中的哪一分組

1天中的哪一個小時

1個月中的哪一天

1年中的哪一個月

1周中的哪一天

例如:
分鐘  小時  天  月  星期  命令/腳本

0       4    *  
*   *   //這個表示凌晨4點進行

0       18   *  
*   2//這個表示每個星期二的每天6點進行

定期檢測服務是否啟動?

每隔多少分鐘?

每隔2分鐘,12到14點,每年的3-6和9-12月,每周1-5執(zhí)行

每隔1小時只需要在第二列寫*/1即可[備注2]

    • 進程管理

命令w:

Load average:分別顯示系統(tǒng)在過去1、5、15分鐘內(nèi)的平均負載程度

ps命令:

參數(shù):a顯示所有的用戶進程,u顯示用戶名和啟動的時間,x顯示沒有控制終端的進程,e顯示所有的進程,包括沒有控制終端的進程,l表示長格式顯示,w表示寬行顯示,

可以使用多個w進行加寬使用

Top命令:

按d可以修改刷新的時間,按c可以讓命令提示更全面

按u可以根據(jù)用戶查看其進程,按k可以用PID終止該進程

    • 文件系統(tǒng)

/usr/bin  、 /bin  :存放所有的用戶可以執(zhí)行的命令

/usr/sbin  、/sbin  :存放只有root可以執(zhí)行的命令

/home:用戶缺省宿主主目錄

/proc:虛擬文件系統(tǒng),存放當前內(nèi)存鏡像

/dev:存放設備文件

/lib:存放系統(tǒng)程序運行所需的共享庫

/lost+found  :存放一些系統(tǒng)出錯的檢查結(jié)果

備注:

在linux里面所有的設備都是文件。

/usr相等于window的/c:\windows

/tmp:存放臨時文件

/etc/:系統(tǒng)的配置文件

/var:包含進程發(fā)生變動的文件,如郵件、日志文件、計劃任務等

/usr:存放所有的命令、庫、手冊頁等

/mnt:臨時文件系統(tǒng)的安裝點

/boot:內(nèi)核文件及自舉程序文件保存的位置

查看系統(tǒng)分區(qū):df

查看分區(qū)信息,一般用df –h它以數(shù)據(jù)塊顯示,df –m以M顯示

[root@tourbis usr]# df –m
Filesystem 1M-blocks Used Available Use% Mounted on //掛載點,看做c,d盤
/dev/sda5 17863 9394 7556 56% /
tmpfs 246 0 246 0% /dev/shm
/dev/sda1 190 36 145 20% /boot
/dev/sda3 969 2 917 1% /home

統(tǒng)計文件大小:du

查看文件和目錄的大小,命令du –h 文件或者目錄

但是上面會顯示很多出來,所以只是統(tǒng)計出目錄大小不顯示目錄下面的文件大小的情況可以使用命令:du –sh /etc

    • 網(wǎng)絡基本操作

沒有網(wǎng)絡更新時間:date 102509322016(月日小時分鐘年.秒)

有網(wǎng)絡更新時間:ntpdate aisa-pool.ntp.org,確保ntpd服務啟動

備注:時間準確對于集群而言是相當重要的。

修改網(wǎng)絡:setup

防火墻:service iptables status  、 vim /etc/sysconfig/iptables

    • Shell編程

set命令:

查看所有定義的變量包括系統(tǒng)的環(huán)境變量

unset NAME,可以刪除定義的變量

查看永久變量:echo $PATH

單引號和雙引號的區(qū)別

[root@tourbis test]# time=12

[root@tourbis test]# date="$time hello";echo $date

12 hello

[root@tourbis test]# date='$time hello';echo $date

$time hello

單引號會原封不動的把值作為這個變量名的value,但是如果使用的是單引號,它還可以獲取單引號里面的其他變量值

程序略。

    • 常用的功能

查看shell:vim /etc/shells

查看歷史記錄:history

查看別名:alias

輸出重定向: ls –l /tmp > /tmp.msg

查看開機啟動: chkconfig –list

NetworkManager  0:關閉  1:關閉  2:啟用  3:啟用  4:啟用  5:啟用  6:關閉
abrt-ccpp 0:關閉 1:關閉 2:關閉 3:啟用 4:關閉 5:啟用 6:關閉
abrtd 0:關閉 1:關閉 2:關閉 3:啟用 4:關閉 5:啟用 6:關閉
acpid 0:關閉 1:關閉 2:啟用 3:啟用 4:啟用 5:啟用 6:關閉

修改運行時候的服務狀態(tài) :

命令:chkconfig –levels 2345 sshd off  //指定多個運行級別,它表示在運行級別2,3,4,5將sshd服務關閉,不再自啟

命令:chkconfig –level 2 sshd off  //指定1個運行級別,它表示在運行級別2的時候,將sshd服務關閉

  • Hadoop偽分布式集群搭建

    • 服務器網(wǎng)絡設置

    • Host-Only模式

    • 橋接模式

    • NAT模式

登錄服務器:

userName:root

password:123456

查看linux的ip:ifconfig

重啟網(wǎng)絡:service network restart

重啟網(wǎng)絡:service network restart

主機名:hostname

更改主機名稱:vim  /etc/sysconfig/network

域名映射:vim  /etc/hosts

重啟系統(tǒng):init 6

    • SecureCRT遠程連接

域名設置

主機名設置

SSH免登錄配置

如果沒有就創(chuàng)建.ssh:mkdir .ssh

創(chuàng)建秘鑰:ssh-keygen 默認采用RSA算法

查看免登陸的主機:

[root@tourbis .ssh]# cat known_hosts
tourbis,192.168.1.88 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAre3rubrGIEoZO2CH3GgL9KJxzjqjtxFam/1cIYqgPAomm5iEuBAAI1ef+VMfA6/ePkSqQBTSfO8+tZlhNmwZWx0Cpjm9hliYLegI77M1LrqPZljY87ptD6qBBUq0nB+nQ+r67872xKmb5ns9hiG27olckXjFDB4El2fv1jOPtUWGrrynnjz/v5DJutMmscR+Oz54nWd52rXCn1sW3qzw35PsnZvTrflAG4FPqGU9h3roVAWWdrVL7N68wwufWL4Qr6wHu7ipE+RLjeXk8qDJhdRoqA1Ueh3hlJdwJW8P8WqmD7x2rBFmp8LhUqaalBmpA6CwScwjHFO1ooHOktpEhw==
dfs-node02,192.168.1.89 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAre3rubrGIEoZO2CH3GgL9KJxzjqjtxFam/1cIYqgPAomm5iEuBAAI1ef+VMfA6/ePkSqQBTSfO8+tZlhNmwZWx0Cpjm9hliYLegI77M1LrqPZljY87ptD6qBBUq0nB+nQ+r67872xKmb5ns9hiG27olckXjFDB4El2fv1jOPtUWGrrynnjz/v5DJutMmscR+Oz54nWd52rXCn1sW3qzw35PsnZvTrflAG4FPqGU9h3roVAWWdrVL7N68wwufWL4Qr6wHu7ipE+RLjeXk8qDJhdRoqA1Ueh3hlJdwJW8P8WqmD7x2rBFmp8LhUqaalBmpA6CwScwjHFO1ooHOktpEhw==
dfs-node03,192.168.1.90 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAre3rubrGIEoZO2CH3GgL9KJxzjqjtxFam/1cIYqgPAomm5iEuBAAI1ef+VMfA6/ePkSqQBTSfO8+tZlhNmwZWx0Cpjm9hliYLegI77M1LrqPZljY87ptD6qBBUq0nB+nQ+r67872xKmb5ns9hiG27olckXjFDB4El2fv1jOPtUWGrrynnjz/v5DJutMmscR+Oz54nWd52rXCn1sW3qzw35PsnZvTrflAG4FPqGU9h3roVAWWdrVL7N68wwufWL4Qr6wHu7ipE+RLjeXk8qDJhdRoqA1Ueh3hlJdwJW8P8WqmD7x2rBFmp8LhUqaalBmpA6CwScwjHFO1ooHOktpEhw==
0.0.0.0 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAre3rubrGIEoZO2CH3GgL9KJxzjqjtxFam/1cIYqgPAomm5iEuBAAI1ef+VMfA6/ePkSqQBTSfO8+tZlhNmwZWx0Cpjm9hliYLegI77M1LrqPZljY87ptD6qBBUq0nB+nQ+r67872xKmb5ns9hiG27olckXjFDB4El2fv1jOPtUWGrrynnjz/v5DJutMmscR+Oz54nWd52rXCn1sW3qzw35PsnZvTrflAG4FPqGU9h3roVAWWdrVL7N68wwufWL4Qr6wHu7ipE+RLjeXk8qDJhdRoqA1Ueh3hlJdwJW8P8WqmD7x2rBFmp8LhUqaalBmpA6CwScwjHFO1ooHOktpEhw==
localhost ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAre3rubrGIEoZO2CH3GgL9KJxzjqjtxFam/1cIYqgPAomm5iEuBAAI1ef+VMfA6/ePkSqQBTSfO8+tZlhNmwZWx0Cpjm9hliYLegI77M1LrqPZljY87ptD6qBBUq0nB+nQ+r67872xKmb5ns9hiG27olckXjFDB4El2fv1jOPtUWGrrynnjz/v5DJutMmscR+Oz54nWd52rXCn1sW3qzw35PsnZvTrflAG4FPqGU9h3roVAWWdrVL7N68wwufWL4Qr6wHu7ipE+RLjeXk8qDJhdRoqA1Ueh3hlJdwJW8P8WqmD7x2rBFmp8LhUqaalBmpA6CwScwjHFO1ooHOktpEhw==

查看遠程登陸信息

拷貝秘鑰:ssh-copy-id 主機,比如ssh-copy-id -i docker

關閉防火墻

建議加入到開機啟動項:

命令:chkconfig –level 3456 iptables off

    • 服務器JDK安裝

安裝步驟流程:

EXPORT JAVA_HOME=

PATH=$PATH:$JAVA_HOME/bin

上傳或下載文件

解壓文件

配置配置文件

配置環(huán)境變量

查看JDK版本信息

服務器Hadoop安裝

安裝步驟流程:

上傳或下載文件

解壓文件

配置配置文件

具體可以參考官網(wǎng)的單節(jié)點安裝,關于配置文件官網(wǎng)有詳細的解析。

export JAVA_HOME=/usr/jdk

core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://tourbis:9000</value>
</property>
<property>
<name>hadoop.tmp.dir </name>
<value>/usr/hadoop/hdpdata</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>tourbis</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
slaves
配置datanode在哪臺機器上啟動
  • 配置環(huán)境變量

  • 格式化HDFS文件系統(tǒng)

[root@tourbis bin]# hdfs
Usage: hdfs [--config confdir] COMMAND
where COMMAND is one of:
dfs run a filesystem command on the file systems supported in Hadoop.
namenode -format format the DFS filesystem
secondarynamenode run the DFS secondary namenode
namenode run the DFS namenode
journalnode run the DFS journalnode
zkfc run the ZK Failover Controller daemon
  • 分發(fā)到其它機器

scp  -r source PATH

  • 啟動HDFS集群

  • JPS查看進程

  • 端口監(jiān)聽查看

  • 查看啟動日志信息

網(wǎng)頁端查看

    • 常見問題

loaded library異常

異常信息如下:

Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library /usr/hadoop/lib/native/libhadoop.so which might have disabled stack guard. The VM will try to fix the stack guard now.
It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
18/08/09 09:58:56 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

我們檢測一下本地庫加載情況:

[root@hdfs ~]# hadoop checknative

Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library /usr/hadoop/lib/native/libhadoop.so which might have disabled stack guard. The VM will try to fix the stack guard now.
It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
18/08/09 10:00:57 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Native library checking:
hadoop: false
zlib: false
snappy: false
lz4: false
bzip2: false
18/08/09 10:00:58 INFO util.ExitUtil: Exiting with status 1

hadoop本地庫加載情況

解決方案:

配置hadoop-env.sh文件尾端加下面參數(shù):

#解決Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError,

export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"

Hadoop啟動不正常

用瀏覽器訪問namenode的50070端口,不正常,需要診斷問題出在哪里:

a、在服務器的終端命令行使用jps查看相關進程

(namenode1個節(jié)點   datanode3個節(jié)點   secondary namenode1個節(jié)點)

b、如果已經(jīng)知道了啟動失敗的服務進程,進入到相關進程的日志目錄下,查看日志,分析異常的原因

1)配置文件出錯,saxparser  exception; ——找到錯誤提示中所指出的配置文件檢查修改即可

2)unknown host——主機名不認識,配置/etc/hosts文件即可,或者是配置文件中所用主機名跟實際不一致

(注:在配置文件中,統(tǒng)一使用主機名,而不要用ip地址)

3)directory 訪問異常—— 檢查namenode的工作目錄,看權(quán)限是否正常。

datanode啟動不正常

a)查看datanode的日志,看是否有異常,如果沒有異常,手動將datanode啟動起來

sbin/hadoop-daemon.sh start datanode

b)很有可能是slaves文件中就沒有列出需要啟動的datanode

c)排除上述兩種情況后,基本上,能在日志中看到異常信息:

1、配置文件

2、ssh免密登陸沒有配置好

3、datanode的身份標識跟namenode的集群身份標識不一致(刪掉datanode的工作目錄)

datanode節(jié)點超時時間設置

datanode進程死亡或者網(wǎng)絡故障造成datanode無法與namenode通信,namenode不會立即把該節(jié)點判定為死亡,要經(jīng)過一段時間,這段時間暫稱作超時時長。HDFS默認的超時時長為10分鐘+30秒。如果定義超時時間為timeout,則超時時長的計算公式為:

timeout  = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval。

而默認的heartbeat.recheck.interval 大小為5分鐘,dfs.heartbeat.interval默認為3秒。

需要注意的是hdfs-site.xml 配置文件中的heartbeat.recheck.interval的單位為毫秒,dfs.heartbeat.interval的單位為秒。所以,舉個例子,如果heartbeat.recheck.interval設置為5000(毫秒),dfs.heartbeat.interval設置為3(秒,默認),則總的超時時間為40秒。

hdfs-site.xml中的參數(shù)設置格式:

<property>
<name>heartbeat.recheck.interval</name>
<value>2000</value>
</property>
<property>
<name>dfs.heartbeat.interval</name>
<value>1</value>
</property>

namenode安全模式

當namenode發(fā)現(xiàn)集群中的block丟失數(shù)量達到一個閥值時,namenode就進入安全模式狀態(tài),不再接受客戶端的數(shù)據(jù)更新請求

在正常情況下,namenode也有可能進入安全模式:

集群啟動時(namenode啟動時)必定會進入安全模式,然后過一段時間會自動退出安全模式(原因是datanode匯報的過程有一段持續(xù)時間)

也確實有異常情況下導致的安全模式

原因:block確實有缺失

措施:可以手動讓namenode退出安全模式,bin/hdfs dfsadmin -safemode leave

或者:調(diào)整safemode門限值:  dfs.safemode.threshold.pct=0.999f

HDFS冗余數(shù)據(jù)塊自動刪除

在日常維護hadoop集群的過程中發(fā)現(xiàn)這樣一種情況:

某個節(jié)點由于網(wǎng)絡故障或者DataNode進程死亡,被NameNode判定為死亡,HDFS馬上自動開始數(shù)據(jù)塊的容錯拷貝;當該節(jié)點重新添加到集群中時,由于該節(jié)點上的數(shù)據(jù)其實并沒有損壞,所以造成了HDFS上某些block的備份數(shù)超過了設定的備份數(shù)。通過觀察發(fā)現(xiàn),這些多余的數(shù)據(jù)塊經(jīng)過很長的一段時間才會被完全刪除掉,那么這個時間取決于什么呢?

該時間的長短跟數(shù)據(jù)塊報告的間隔時間有關。Datanode會定期將當前該結(jié)點上所有的BLOCK信息報告給Namenode,參數(shù)dfs.blockreport.intervalMsec就是控制這個報告間隔的參數(shù)。

hdfs-site.xml文件中有一個參數(shù):

<property>
<name>dfs.blockreport.intervalMsec</name>
<value>3600000</value>
<description>Determines block reporting interval in milliseconds.</description>
</property>

其中3600000為默認設置,3600000毫秒,即1個小時,也就是說,塊報告的時間間隔為1個小時,所以經(jīng)過了很長時間這些多余的塊才被刪除掉。通過實際測試發(fā)現(xiàn),當把該參數(shù)調(diào)整的稍小一點的時候(60秒),多余的數(shù)據(jù)塊確實很快就被刪除了。

    • 集群初步使用

測試集群

測試的時候,往集群上傳和下載文件。也可以查看集群狀態(tài),比如hdfs dfsadmin

比如查看存活節(jié)點的信息

[root@hdfs ~]# hdfs dfsadmin -report -live
Configured Capacity: 37460910080 (34.89 GB)
Present Capacity: 24131354624 (22.47 GB)
DFS Remaining: 24130924544 (22.47 GB)
DFS Used: 430080 (420 KB)
DFS Used%: 0.00%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
-------------------------------------------------
Live datanodes (2): Name: 192.168.1.91:50010 (dfs01)
Hostname: dfs01
Decommission Status : Normal
Configured Capacity: 18730455040 (17.44 GB)
DFS Used: 212992 (208 KB)
Non DFS Used: 6535073792 (6.09 GB)
DFS Remaining: 12195168256 (11.36 GB)
DFS Used%: 0.00%
DFS Remaining%: 65.11%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Thu Aug 09 11:38:09 CST 2018 Name: 192.168.1.90:50010 (hdfs)
Hostname: hdfs
Decommission Status : Normal
Configured Capacity: 18730455040 (17.44 GB)
DFS Used: 217088 (212 KB)
Non DFS Used: 6794481664 (6.33 GB)
DFS Remaining: 11935756288 (11.12 GB)
DFS Used%: 0.00%
DFS Remaining%: 63.72%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Thu Aug 09 11:38:06 CST 2018

Hadoop Shell命令

[root@tourbis hadoop]# hadoop fs
Usage: hadoop fs [generic options]
[-appendToFile <localsrc> ... <dst>]
[-cat [-ignoreCrc] <src> ...]
[-checksum <src> ...]
[-chgrp [-R] GROUP PATH...]
[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
[-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst>]
[-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-count [-q] [-h] <path> ...]
[-cp [-f] [-p | -p[topax]] <src> ... <dst>]

動態(tài)擴容

如何實現(xiàn)?免登陸不需要做,但是域名映射,slaves需要改。

MapReducer使用

mapreduce是hadoop中的分布式運算編程框架,只要按照其編程規(guī)范,只需要編寫少量的業(yè)務邏輯代碼即可實現(xiàn)一個強大的海量數(shù)據(jù)并發(fā)處理程序

下面編寫大數(shù)據(jù)入門程序—WordCount程序

需求

從大量(比如T級別)文本文件中,統(tǒng)計出每一個單詞出現(xiàn)的總次數(shù)

mapreduce實現(xiàn)思路

Map階段:

a)       從HDFS的源數(shù)據(jù)文件中逐行讀取數(shù)據(jù)

b)       將每一行數(shù)據(jù)切分出單詞

c)        為每一個單詞構(gòu)造一個鍵值對(單詞,1)

d)       將鍵值對發(fā)送給reduce

Reduce階段:

a)       接收map階段輸出的單詞鍵值對

b)       將相同單詞的鍵值對匯聚成一組

c)        對每一組,遍歷組中的所有“值”,累加求和,即得到每一個單詞的總次數(shù)

d)       將(單詞,總次數(shù))輸出到HDFS的文件中

具體編碼實現(xiàn)

pom.xml導入依賴

<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.6.1</version>
</dependency>
</dependencies>

編寫業(yè)務代碼

public class WordCountDriver {
public static class WordCountDriverMapper extends Mapper<LongWritable,Text,Text,IntWritable> { @Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String s = value.toString();
String[] lines = s.split(",");
for(String word:lines){
context.write(new Text(word),new IntWritable(1));
} }
} public static class WordCountDriverReducer extends Reducer<Text,IntWritable,Text,IntWritable> {
@Override
protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int sum=0;
for(IntWritable value:values){
sum+=value.get();
}
context.write(key,new IntWritable(sum));
}
} public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job wcJob = Job.getInstance();
wcJob.setJarByClass(WordCountDriver.class);
wcJob.setMapperClass(WordCountDriverMapper.class);
wcJob.setReducerClass(WordCountDriverReducer.class);
wcJob.setMapOutputKeyClass(Text.class);
wcJob.setMapOutputValueClass(IntWritable.class);
wcJob.setInputFormatClass(TextInputFormat.class);
FileInputFormat.setInputPaths(wcJob, new Path(args[0]));
FileSystem fileSystem = FileSystem.get(conf);
Path path = new Path(args[1]);
if(fileSystem.exists(path)){
fileSystem.delete(path,true);
}
FileOutputFormat.setOutputPath(wcJob, path);
System.out.println(wcJob.waitForCompletion(true) ? 0 : 1);
} }

打包,并啟動服務器hadoop集群

先用IDEA打jar包。然后啟動Hadoop集群

由于需要用到MapReducer,所以還需要啟動start-yarn.sh

全部啟動:start-all.sh,全部停止:stop-all.sh

單獨啟動;start-dfs.sh ,start-yarn.sh

啟動之后,查看監(jiān)聽端口:

網(wǎng)頁端查看:

http://192.168.1.90:8088

上傳到服務器

把jar包上傳到服務器

運行jar包

[root@hdfs ~]# hadoop jar bigdatasum.jar /word /wordout
18/08/09 11:27:09 INFO client.RMProxy: Connecting to ResourceManager at hdfs/192.168.1.90:8032
18/08/09 11:27:12 WARN mapreduce.JobResourceUploader: Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.
18/08/09 11:27:22 INFO input.FileInputFormat: Total input paths to process : 1
18/08/09 11:27:22 INFO mapreduce.JobSubmitter: number of splits:1
18/08/09 11:27:24 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1533785079112_0001
18/08/09 11:27:27 INFO impl.YarnClientImpl: Submitted application application_1533785079112_0001
18/08/09 11:27:27 INFO mapreduce.Job: The url to track the job: http://hdfs:8088/proxy/application_1533785079112_0001/
18/08/09 11:27:27 INFO mapreduce.Job: Running job: job_1533785079112_0001
18/08/09 11:28:04 INFO mapreduce.Job: Job job_1533785079112_0001 running in uber mode : false
18/08/09 11:28:05 INFO mapreduce.Job: map 0% reduce 0%
18/08/09 11:28:25 INFO mapreduce.Job: map 100% reduce 0%
18/08/09 11:28:47 INFO mapreduce.Job: map 100% reduce 100%
18/08/09 11:28:48 INFO mapreduce.Job: Job job_1533785079112_0001 completed successfully
18/08/09 11:28:49 INFO mapreduce.Job: Counters: 49

運行jar

提交任務到集群: hadoop jar bigdatasum.jar /word /wordout

頁面查看提交的任務情況:

任務完成

查看結(jié)果

[root@hdfs wordout]# hdfs dfs -cat /wordout/part-r-00000
a 7
c 3
d 1
s 1
v 2

編碼運行過程報錯

第一種access0,權(quán)限問題

解決方案:

在我們的項目新建一個和源碼一樣的包,這樣它就可以覆蓋掉源代碼,然后我們?nèi)バ薷募纯桑襟E如下:

1、Maven下載hadoop的源代碼

2、新建項目包:org.apache.hadoop.io.native

在項目下面創(chuàng)建類NativeIO,然后到源代碼里面拷貝NativeIO代碼,覆蓋我們剛剛創(chuàng)建的那個類,然后搜索access0這個方法,把原來的返回值設置為返回true即可解決

缺失MSVCR100.dll而報錯

這個錯誤是缺失msvcr100.dll而報錯產(chǎn)生的,我們可以進入hadoop的bin目錄里面:

當我們雙擊這個文件的時候:

會彈出下面的報錯:

解決方案:

1.下載這個dll,如果系統(tǒng)是32位的,將其放到C:\Windows\System32里面,如果是64位的,將其放到C:\Windows\SysWOW64里面去

2.需要注冊這個dll

硬盤不夠用的時候?qū)е抡也坏轿募惓?/p>

在實際當中,有些人的tmp目錄非常大,這個時候?qū)е卤P符不夠用而使得map過程的臨時文件沒法保存,而發(fā)生報錯。

批注:

  1. [批注1]:

    一共有9位,其中最后一位為保留位,其它位都有實際意義。
    賬戶名稱
    密碼位
    這個密碼什么時候修改的(距離1970/1/1)
    密碼不能修改的天數(shù)(0表示任何時間都可修改)
    密碼需要被變更的天數(shù)(1表示永遠不能修改,99999表示不需要修改)
    密碼變更前提前幾天警告(一般7天,-1表示沒有警告)
    賬號失效日期(-1表示永遠不會禁用)
    賬號取消日期或賬戶被禁用天數(shù)(-1表示該賬戶被啟用)

    shadow

  2. [批注2]:
    */1 * * * * echo “”  //send email
    /var/spool/mail/root
    測試:
    每隔1分鐘往文件里面寫入數(shù)據(jù)
    */1 * * * * echo 'write data 2 this file'>>/root/file
    查看:tail –F file

    每隔1小時只需要在第二列寫*/1即可

總結(jié)

以上是生活随笔為你收集整理的大数据初级笔记二:Hadoop入门之Hadoop集群搭建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。