爲了用Hadoop集羣,我們選用了Ubuntu作爲開發的平臺,相應的就有一堆在Windows上不會出現的問題需要解決。印象最深刻的就是由於X11的問題,在Windows上用R畫圖是沒問題的,但是換到了Ubuntu上就顯示不出來,這個問題直到比賽當天都一直存在,Team Member一直爲了這個問題在改,最終還是成功的解決了,在此也對他們表示感謝。
這篇文章就列一下當時配環境時候的一些步驟,方便後人在Ubuntu上搭環境。
JDK安裝
- 下載jdk
- Tar –zxvf jdk路徑
- 配置環境變量,java_home,path,classpath
Sudo chmod u+x /usr/lib/jvm/java/jdk1.6.0_12.bin
sudo /usr/lib/jvm/java/jdk1.6.0_12.bin
Hadoop安裝
- 環境:ubuntu12.10、hadoop1.1.1、jdk1.7
- namenode:master(ip:10.1.151.55)
- datanode:slave1(ip:10.1.151.81)、slave2(ip:10.1.151.82)、slave3(ip:10.1.151.83)
- 配置步驟:
(1)配置NameNode和DataNode:
修改每臺機器的/etc/hosts(包括namenode和datanode)
10.1.151.55 master
10.1.151.81 slave1
10.1.151.82 slave2
10.1.151.83 slave3
(2)在所有的機器上建立相同的用戶
useradd bit
passwd bit
成功建立bit用戶後,輸入用戶密碼就是該用戶密碼
(3)SSH設置
使用bit用戶登錄
在所有機器/home/ bit下
mkdir.ssh
在namenode上生成密鑰對
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
注意點:
- 不進行以下步驟SSH免密碼登錄設置會不成功
- .ssh目錄要設成700 有執行權限
- authorized_keys要設成600 否則會出錯
- 還有ssh 登陸要加入用戶名的 比如ssh root@localhost
這時從master向其他機器發起SSH連接,只有第一次登錄時需要輸入密碼,以後則不需要。
(5)在所有機器上安裝配置Hadoop
首先在namenode上配置,配置後在分發到datanode上
在這裏,下載hadoop-1.1.1.tar.gz,然後解壓到/home/bit/下即可
tar -zxvf hadoop-1.1.1.tar.gz
接下來需要修改hadoop的conf文件夾下的配置信息:
修改hadoop-env.sh,加入如下語句,使得hadoop能夠找到java的路徑:
export JAVA_HOME=/home/bit/jvm/jdk1.7.0
修改core-site.xml,如下:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs:// master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/bit/hadoop-1.1.1/tmp</value>
</property>
</configuration>
注意:hadoop.tmp.dir是hadoop文件系統依賴的基礎配置,很多路徑都依賴它。它默認的位置是在/tmp/{$user}下面,在local和hdfs都會建有相同的目錄,但是在/tmp路徑下的存儲是不安全的,因爲linux一次重啓,文件就可能被刪除。導致namenode啓動不起來。
修改hdfs-site.xml,如下:
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
修改mapred-site.xml,如下:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property>
</configuration>
masters裏寫入作爲namenode節點機器的IP或名稱
master
slaves裏寫入作爲datanode節點的機器的IP或名稱
slave1
slave2
slave3
到此,hadoop的有關配置已經完成,namenode端通過如下命令把配置好的hadoop發送到各個datanode處:
scp -r hadoop-1.1.1 slave1:/home/bit
scp -r hadoop-1.1.1 slave2:/home/bit
scp -r hadoop-1.1.1 slave3:/home/bit
(6)注意點:關閉所有機器上的防火牆,不然會導致datanode起不來
/etc/init.d/iptables stop
在namenode端cd到hadoop文件夾下,格式化分佈式文件系統:
bin/hadoop namenode –format
下面接着在namenode端啓動hadoop進程:
bin/start-all.sh
如果沒有其它差錯的話,hadoop可以正常啓動。
R安裝
命令行安裝
sudo apt-get install r-base
手動安裝
1、下載R安裝包
sudo apt-get install gfortran
sudo apt-get install readline-common
sudo apt-get install build-essential
sudo apt-get libx11-dev
./configure –enable-R-shlib
Make
Make install
2、運行
tar -zvxf R-×.tar.gz
解壓縮,其中×爲R語言的版本號
3、進入解壓縮的目錄,運行
./configure –prefix=/home/me/R –enable-R-shlib
prefix參數可以設置R將要安裝的路徑,enable-R-shlib可以保證lib目錄下的動態庫能夠共享,這個選項一定不要忘記添加,否則以後安裝某些包的時候會出現“Error in dyn.load”的錯誤
4、注意問題
- 如果系統會提示“未找到G77編譯器的錯誤”,需要安裝一個gfortran,運行命令
sudo apt-get install build-essential
sudo apt-get install gfortran
- 如果出現錯誤“configure: error: –with-readline=yes (default) and headers/libs are not available”,需要安裝libreadline6-dev
sudo apt-get install libreadline6-dev
- 如果出現錯誤:“configure: error: –with-x=yes (default) and X11 headers/libs are not available”,需要安裝libxt-dev
sudo apt-get install libxt-dev
所有依賴包安裝好之後,配置就可以成功,此時進行編譯就能成功:
運行命令:
make
make install
安裝完之後需要配置R的環境變量,R_HOME和R_LIBS和PATH,這樣R環境就安裝完成。
JRI環境配置
1、在R中安裝rJava包,運行R,然後執行
install.packages(“rJava”)
完成rJava的安裝
2、下載JRI的三個jar包,分別是:JRI.jar,JRIEngine.jar,REngine.jar
3、配置動態鏈接庫:
- 進入rJava的目錄,找到jri目錄下的libjri.so將此文件放入到/usr/lib目錄下
- 將R安裝目錄下的libR.so也放入到/usr/lib目錄下
即完成了jri環境的配置,這樣我們在java環境下就可以直接調用R語言
Tomcat調用R
- 將rjava中的libjri.so和libR.so複製到tomcat安裝目錄的bin(lib)目錄下,這樣在tomcat中就可以使用jri,調用R,進行語句執行
- 在tomcat中設置環境變量TOMCAT_HOME和CATALINA_HOME配置爲tomcat的安裝目錄
- 將mysql和postgreSQL的jdbc放置到tomcat的bin和lib目錄下,即可訪問數據庫
System.setProprety(),System.getProprety()設置和獲取環境變量
安裝mysql數據庫
命令行安裝
sudo apt-get install mysql-server
手動安裝
cp mysql-5.1.51.tar.gz /usr/local/src/
cd /usr/local/src/
groupadd -r mysql
useradd -g mysql -r mysql
gunzip < mysql-5.1.51.tar.gz | tar -xvf -
cd mysql-5.1.51/
./configure –prefix=/usr/local/mysql/
make
make install
cd /usr/local/mysql/
chown -R mysql .
chgrp -R mysql .
/usr/local/mysql/bin/mysql_install_db --user=mysql
chown -R root
cp /usr/local/mysql/share/mysql/my-huge.cnf /etc/my.cnf
cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysql.server
./bin/mysqld_safe --user=mysql &
chown -R mysql /usr/local/mysql/var/
/etc/init.d/mysql.server status
/etc/init.d/mysql.server start
/usr/local/mysql/bin/mysql
安裝postgreSQL數據庫
- 運行命令
sudo apt-get install postgresql-8.4 postgresql-client-8.4 postgresql-contrib-8.4 //其中版本可以自己設定
/usr/lib/postgresql/8.4/ //存放postgresql相關的二進制文件
/usr/lib/postgresql/8.4/bin/ //可執行文件
/usr/lib/postgresql/8.4/lib/ //共享庫文件
/etc/postgres/8.4/main/ //存放postgresql配置文文件
/var/lib/postgresql/ //postgres用戶的主文件夾
修改PostgreSQL數據庫的默認用戶postgres的密碼
PostgreSQL數據庫默認會創建一個postgres的帳號用戶作爲數據庫的管理員,密碼是隨機的,所以:- 首先,我們需要重置“postgres”用戶的密碼。
命令行如下:
- 首先,我們需要重置“postgres”用戶的密碼。
sudo -u postgres psql(或者sudo su postgres -c psql) //運行psql,psql是一個標準的postgressql客戶端
postgres=# ALTER USER postgres WITH PASSWORD ‘postgres’; //修改postgres的密碼爲postgres,不要忘記添加分號(回車後分號之前的sql語句纔會立即執行)
postgres=# \q //退出
2.修改了數據庫中的密碼之後,我們還需要修改linux下的用戶 “postgres”的密碼:設定成與數據庫中postgres帳號相同的密碼,即postgres。
sudo passwd -d postgres //刪除密碼
sudo -u postgres passwd(或者 sudo su postgres -c passwd) //創建密碼,然後輸入跟之前一樣的密碼。
- 修改PostgresSQL數據庫配置實現遠程訪問
首先,我們需要編輯postgresql.conf:
sudo gedit /etc/postgresql/8.4/main/postgresql.conf
現在,我們需要修改“連接和權 限”兩行。
改變行:#listen_addresses = ‘localhost’ 修改爲:listen_addresses = ‘*’
改變行:#password_encryption = on 修改爲:password_encryption = on
保存並關閉gedit。
3、最後一步,我們必須設置誰纔可以操作數據服務器,這一 切都是在pg_hba.conf中完成的。
sudo gedit /etc/postgresql/8.4/main/pg_hba.conf
把以下內容添加到 pg_hba.conf底部:
# to allow your client visiting postgresql server
host all all 0.0.0.0 0.0.0.0 md5
重啓服務器,以上的配置就生效了
sudo /etc/init.d/postgresql-8.4 restart
4、創建用戶和數據庫:
使用命令行創建用戶和數據庫:
sudo -u postgres createuser -D -P mynewuser //-D該用戶沒有創建數據庫的權利,-P提示輸入密碼,後面的選項都可以省略,命令執行的時候會提示用戶選擇yes或者no
sudo -u postgres createdb -O mynewuser mydatabase //-O設定所有者爲mynewuser
或者使用psql創建用戶和數據庫:
首先利用psql登錄postgresql服務器
sudo -u postgres psql[ -U postgres -h 127.0.0.1] //運行psql,後面[]中的內容可選,用於登錄服務器,默認會登錄本機
然後在psql程序中創建用戶和數據庫:用戶名和數據庫名稱加上引號後才區分大小寫,否則會自動轉換成小寫:
create user “mynewuser” with password ‘mynewuser nocreatedb;
create database “mydatabase” with owner=mynewuser;
安 裝和使用pgAdmin3客戶端操作 postgresql數據庫
安裝圖形客戶端pgAdmin3,安裝命令行
sudo apt-get install pgadmin3
Tomcat安裝
下載tomcat包,解壓,配置TOMCAT_HOME,即可使用tomcat服務
R語言連接數據庫的配置
下載mysql postgresql數據庫的jdbc將它們添加到系統的classpath中,然後在R中安裝rjdbc包,這樣我們就可以通過r語言來訪問數據庫了。