如何在Ubuntu 18.04上面安裝與管理Kernel

前言

在先前的文章中提到,自從從Ubuntu 16.04升級到Ubuntu 18.04之後,連Kernel也順便安裝了一個新的版本,確切的版本號我已經忘了,但是就讓我的ThinkPad上的電源管理機制上出現了一些奇怪的行為。

在升級到Ubuntu 18.04為我安裝較新版的Kernel中,我筆電從睡眠之中喚醒,就變成一種死機狀態,只看得到畫面,但是其他的東西,像是滑鼠,鍵盤都沒有反應了。

逼的我只能自己手動強制關機與開機。

後來,用了舊版的Kernel,就發現一切正常,所以我就很合理的懷疑,是較新版的Kernel出了些問題。

剛好趁這個機會,剛好看看有沒有什麼工具可以輕易的管理與安裝Kernel,後來還被我找到了。所以本文章中,就是來講解這個工具該如何使用。

前置環境

  • 一台Ubuntu 18.04主機

使用步驟

我們在本文中,會使用到一個叫做「ukuu」的工具,這個工具可以幫助我們輕易的管理與安裝Kernel。

首先,先用下面的指令將ukuu的外部鏡像位址匯入。


sudo add-apt-repository -y ppa:teejee2008/ppa

接著因為是Ubuntu 18.04的關係,所以當匯入進去的時候,會自動跑「sudo apt-get update」去更新所有的鏡像來源。

接著,就可以安裝今天的主角「ukuu」了。


sudo apt-get install ukuu

安裝完成之後,我們可以透過下面指令的方式取得目前所有可以取得安裝的Kernel版本。


ukuu --list

從截圖上來看,就可以知道Kernel版本清單是由新到舊排序。

如果是用下面的指令則是列出目前在作業系統上安裝的Kernel版本清單


sudo ukuu --list-installed

那假設我們要安裝上面列出的最新版「4.20.11」,則透過下面的指令變可以達成。


sudo ukuu --install v4.20.11

若我們要移除指定的Kernel版本,則我們就使用下列的指令來達成。


sudo ukuu --remove v4.20.11

參考資料

Upgrade Kernel on Ubuntu 18.04

如何在Filezilla上可正常的打字

前言

在之前我安裝Filezilla之後,一直沒有辦法正常的打字,通常都會遇到無法將打上去的主機名稱,使用者名稱等字刪掉。

後來我也在askUbuntu上面找到一樣的問題,幸好有熱心網民提供解法。

原因是在於,並沒有設定預設的輸入法給桌面程式使用。因此要預先去做設定。

解決方法

從「Preferences」進去會找到「Language Support」,下面會有一個叫做「Keyboard input method system」,設定好輸入法之後,就會可以正常的編輯FTP相關的資訊了。

如何在Ubuntu 18.04上手動編譯Python 3.5版本

前言

在Ubuntu 18.04中,Python3預設的版本為3.6,但是有的時候想測試的時候要用3.5版本怎辦?

這個時候,就會有兩種方式:

  1. 自己手動編譯一個Python 3.5版本在系統上。
  2. 使用pyenv等Python多版本工具管理Python。

第1種方法,優點是快速但是需要小心不要污染到系統本來的Python設定。

缺點則是在刪除的時候變得較為麻煩,需要手動刪除安裝上去的Python相關資料夾。

第2種方法,優點則是操作起來較為方便且不容易污染到系統Python版本設定。

缺點是建置步驟較為繁雜,多了好幾個步驟。

在本文章中,為展示第1種方法,其目的是紀錄我採過雷的心得與第2種方法做為一個比較。

當然,在下一篇文章中,會針對第2種方法來建置與管理多個Python版本之工具。

前置環境

  1. 需要一個Ubuntu 18.04主機

建置步驟

先安裝一些編譯的時需要用到的套件


sudo apt-get update

sudo apt-get install build-essential checkinstall

sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

接著,切換目錄並下載想要手動編譯安裝的版本,下載完成後進行解壓縮。


cd /usr/src

wget https://www.python.org/ftp/python/3.5.6/Python-3.5.6.tgz

sudo tar xzf Python-3.5.6.tgz

切換到下載回來的Python原始碼目錄並進行檢查編譯環境與安裝在系統上。

使用make altinstall是因為避免污染到系統上的Python環境。


cd Python-3.5.6

sudo ./configure --enable-optimizations

sudo make altinstall

接著執行下列的指令,就代表安裝Python完成了。


python3.5 -V

編譯遇到問題

在編譯更之前的Python版本,比如3.5.2版本,在編譯過程中,可能會遇到類似這樣的錯誤

有這錯誤代表說,SSL擴展無法編譯甚至失敗,最有可能原因是libssl-dev套件關係。

而在Ubuntu 18.04中,libssl-dev套件版本為1.1,在編譯與安裝較舊Python版本可能不適合,為了要解決這個問題,需要將Ubuntu 18.04降版本以便讓Python版本能夠成功的編譯。

而我們可以用下列的方式將libssl-dev套件進行降版本。


sudo apt-get install libssl1.0-dev

將libssl-dev版本改為1.0之後,Python 3.5.2便可以編譯成功了。

移除已編譯後的Python安裝檔

當我們不需要使用已經安裝好的Python執行檔,我們則需要手動刪除安裝到各個目錄下的Python版本。以下是已經整理好要刪除的所有目錄位置。


prefix='/usr/local/'
pyver='3.5.6'

rm -rf \
${prefix}bin/python${pyver} \
${prefix}bin/pip${pyver} \
${prefix}bin/pydoc \
${prefix}bin/include/python${pyver} \
${prefix}lib/libpython${pyver}.a \
${prefix}lib/python${pyver} \
${prefix}bin/python${pyver} \
${prefix}bin/pip${pyver} \
${prefix}bin/include/python${pyver} \
${prefix}lib/libpython${pyver}.a \
${prefix}lib/python${pyver} \
${prefix}lib/pkgconfig/python-${pyver}.pc \
${prefix}lib/libpython${pyver}m.a \
${prefix}bin/python${pyver}m \
${prefix}bin/2to3-${pyver} \
${prefix}bin/python${pyver}m-config \
${prefix}bin/idle${pyver} \
${prefix}bin/pydoc${pyver} \
${prefix}bin/pyvenv-${pyver} \
${prefix}share/man/man1/python${pyver}.1 \
${prefix}include/python${pyver}m
${prefix}bin/pydoc ## WARN: skip if other pythons in local exist.

其中,pyver變數我們可以自行更改成我們需要移除的Python版本。

參考資料

 

如何在Ubuntu 18.04上安裝與更新Docker

前言

在之前,我自己已經把開發環境從Ubuntu 16.04升級成Ubuntu 18.04。

但是,Docker在升級過程中沒有改變,而Docker的版本處在非常舊的階段,為了要解決問題,所以有了這篇文章。

前置環境

  • 一個Ubuntu 18.04主機

安裝步驟

首先,先安裝需要用到的套件。


sudo apt-get update

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

接著,將外部的Docker鏡像來源GPG金鑰匯入,使用下面的步驟完成動作。


curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

把外部鏡像來源匯入


sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"

接著就可以安裝Docker套件了


sudo apt-get install docker-ce

安裝完成之後,可以用下面的指令確認Docker是否有正確的執行在背景服務中


sudo service docker status

# 或是使用下面指令查看Docker服務狀態

sudo systemctl status docker

結論

到這裡,文章就結束了,本篇學到:

  • 在Ubuntu 18.04上透過外部鏡像來源安裝Docker

參考資料

從Ubuntu 16.04升級到Ubuntu 18.04之心得(持續更新)

前言

前幾天,看到Ubuntu 18.04出一段時間了,看是時機成熟了。

所以就把自己平常工作在用的ThinkPad筆電從Ubuntu 16.04升級到Ubuntu 18.04了。

當然,中途有遇到一些情況,讓升級的程序跟步驟變得有些複雜,所以這篇文章,就是在紀錄有關於升級的過程中遇到的問題提供日後大家做參考。

前置動作

當然,需要有一台Ubuntu 16.04主機,不然要怎麼升級成18.04

如果怕升級上去之後,發生一些無法預期的事情,則可以先備份,備份工具可以使用「CloneZilla」進行備份。

升級做法

先依照下面的指令去安裝所有套件的最新版本。


sudo apt-get update

sudo apt-get upgrade

sudo apt-get dist-upgrade

接著按照下面的指令去檢查可以升級的版本


sudo do-release-upgrade -c

那麼,就可以找到「Ubuntu 18.04」的發行版本

接著使用下面指令開始升級


sudo do-release-upgrade

幸運的話,就會開始升級了。

不幸的話,會遇到類似下面字樣的錯誤,而我剛好有遇到下面的錯誤……


Could not calculate the upgrade, .......

這原因其實是因為在檢查的時候發現,在原來的版本中存在著很多套件衝突版本問題需要解決,使用下面的指令可以看到更詳細的套件衝突問題。


grep Broken /var/log/dist-upgrade/apt.log

那我也是遇到同樣的問題,而我嘗試把那些有衝突套件的問題從log最底下開始的套件依序一個個移除,再去使用「sudo do-release-upgrade」去測試是否可以升級。

在升級發行版本的期間,會遇到一些互動式的問題,下面的列舉如下:

  • 確定升級「libc」套件版本?
  • 版本升級上去,要用哪一個版本?
    這時會出現「使用原來版本」,「安裝新版本」與比較兩個版本差異等選項。
    第一個選項是預設的,也就是按下「enter」鍵後會做的事情,那我也是建議使用第一個選項,因為升級版本是有風險的,等之後真的有需求時再個別升級即可。

後來,就可以升級了。不過升級完成之後,會留下很多安裝但是無用的套件,所以記得要使用「sudo apt-get autoremove」來移除一些已安裝但是已經無用的套件。

升級完成之後,有可能會出現「系統有誤」或是處於不穩狀態,這就代表在升級的途中有些套件版本問題需要去解決。

但是,系統還是可以用的,等到真的要用的東西有問題,再來見招拆招的解決套件問題吧!

而且升級上去之後,有些東西會被移除,這時候只能自己手動安裝回來了。

鏡像來源設定方面,會有一些問題,比如說,設定來源不完全等。

我升級完成之後,鏡像只有設定下面兩個來源:


deb http://archive.ubuntu.com/ubuntu/ bionic main restricted
deb-src http://archive.ubuntu.com/ubuntu/ bionic main restricted

這樣是不對的,因為這樣會導致有一些套件會無法安裝到,後來我跑去抄VPS上面Ubuntu 18.04設定的鏡像,並成功了,以下是完成鏡像來源之設定:

設定檔案位置在:「/etc/apt/sources.list」


deb http://archive.ubuntu.com/ubuntu/ bionic main restricted
deb-src http://archive.ubuntu.com/ubuntu/ bionic main restricted

deb http://archive.ubuntu.com/ubuntu/ bionic-updates main restricted
deb-src http://archive.ubuntu.com/ubuntu/ bionic-updates main restricted

deb http://archive.ubuntu.com/ubuntu/ bionic universe
deb-src http://archive.ubuntu.com/ubuntu/ bionic universe
deb http://archive.ubuntu.com/ubuntu/ bionic-updates universe
deb-src http://archive.ubuntu.com/ubuntu/ bionic-updates universe

deb http://archive.ubuntu.com/ubuntu/ bionic multiverse
deb-src http://archive.ubuntu.com/ubuntu/ bionic multiverse
deb http://archive.ubuntu.com/ubuntu/ bionic-updates multiverse
deb-src http://archive.ubuntu.com/ubuntu/ bionic-updates multiverse

deb http://archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu bionic-security main restricted
deb-src http://security.ubuntu.com/ubuntu bionic-security main restricted
deb http://security.ubuntu.com/ubuntu bionic-security universe
deb-src http://security.ubuntu.com/ubuntu bionic-security universe
deb http://security.ubuntu.com/ubuntu bionic-security multiverse
deb-src http://security.ubuntu.com/ubuntu bionic-security multiverse

設定完成之後記得執行「sudo apt-get update」去更新鏡像的來源。

PHPBrew下的PHP5.x版本

我在Ubuntu 16.04的時候,有使用PHPBrew編譯了幾個PHP 5.x版本,當升級到Ubuntu 18.04的時候,發現自己編譯的PHP 5.x不能使用了。

會出現下面的錯誤:


php: /usr/lib/x86_64-linux-gnu/libcurl.so.4: version `CURL_OPENSSL_3' not found (required by php)

查了一下原因,發現是libcurl3套件已經從18.04版本中移除了。

需要自己用下面的指令把此套件安裝回來。


sudo apt-get update

sudo apt-get install libcurl3/bionic

PCMan file manager F4快捷鍵在確切的目錄上開啟終端機

升級上去之後,會發現,在檔案管理工具上面,本來的F4快捷鍵功能就會有問題,無法正常的開啟,去發現觸發得腳本的位置在「/usr/bin/lxsession-default-terminal」,打開此檔案則會發現如下的內容:


#!/bin/sh
#
# Copyright (C) 2013 Julien Lavergne (gilir@ubuntu.com)
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.

echo "Launching terminal manager"

dbus-send --session --print-reply --dest="org.lxde.SessionManager" /org/lxde/SessionManager org.lxde.SessionManager.SessionLaunch string:"terminal_manager" string:"$PWD"> /dev/null 2>&1

exit 0

中間那一行「dbus…..」指令是有問題的。

所以我們需要找到正確啟動終端機的方法,後來發現,「lxterminal」指令可以正常的啟動終端機。而後面的再加上「–working-directory」參數與「$PWD」值就可以成功開啟當下的目錄的終端機。

所以「/usr/bin/lxsession-default-terminal」裡面的內容則需要改成:


#!/bin/sh
#
# Copyright (C) 2013 Julien Lavergne (gilir@ubuntu.com)
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.

echo "Launching terminal manager"

lxterminal --working-directory=$PWD

exit 0

參考資料

 

在Ubuntu 18.04上安裝Shutter擷取圖片工具

前言

Shutter是一個影像擷取螢幕畫面的工具,可以使用不同的方式來擷取圖片。

但是從Ubuntu 16.04升級到了Ubuntu 18.04,之後,我的Shutter截圖工具就被移除了。

所以在此篇文章中,就是要把此工具給安裝回來。

安裝Shutter


sudo apt-get update

sudo apt-get install shutter

接著打開某張圖片之後,會發現「編輯按鈕不能點擊」。

這是因為缺少一些必要套件所導致的,那我們要解決這個問題,就必須要把一些套件給安裝回來,執行下面的指令把套件給安裝回來。

記得!安裝缺少套件前,Shutter需要是沒有啟動的狀態

首先先下載幾個必要的套件:

  1. libgoocanvas-common
  2. libgoocanvas3
  3. libgoo-canvas-perl

接著,按照下面指令安裝。

手動下載缺失的套件原因是因為,這些套件已經從Ubuntu 18.04中的官方鏡像移除了,因此需要自行手動下載並安裝,在安裝的過程中,會有一些套件相依與相容性的問題,因此每個套件並不都可以順利的安裝。

所以在每個套件安裝之後,都有可能需要使用apt-get install -f指令進行相依套件衝突問題。


sudo dpkg -i /path/to/libgoocanvas-common_1.0.0-1_all.deb

sudo dpkg -i /path/to/libgoocanvas3_1.0.0-1_amd64.deb

sudo dpkg -i /path/to/libgoo-canvas-perl_0.06-2ubuntu3_amd64.deb

sudo apt-get -f install

sudo dpkg -i /path/to/libgoo-canvas-perl_0.06-2ubuntu3_amd64.deb

接著重新啟動之後,「編輯」按鈕就回來了。

參考資料

  1. [Quick Fix] The “Edit” Option Disabled in Shutter in Ubuntu 18.04

如何在Ubuntu 18.04上安裝與管理多個PHP 7.x版本

前言

最近幾天,看Ubuntu 18.04也出一段時間了,後來也出了「Ubuntu 18.04.01」的版本。

看起來也成熟了,所以就從Ubuntu 16.04升級到Ubuntu 18.04了。

在本文章中,我們除了使用「PHPBrew」可以安裝與管理多個PHP版本之外,也可以直接安裝使用「apt-get」等相關指令在本機系統上安裝與管理多個PHP7.x的版本。

至於,PHP5.x版本嘛…..就沒有要敘述了

因為PHP 7.x是目前官方維護與主力的版本,所以就以PHP7.x為主要的版本作為教學。

前置環境

首先需要有下列的環境才可以繼續後面的步驟。

  1. 一個完整乾淨的Ubuntu 18.04

匯入第三方套件庫

因為Ubuntu 18.04官方預設PHP版本只有7.2,但是我們需要多個版本。

因此我們就需要仰賴第三方的套件來源庫幫助我們達成這件事情。

依序執行下列三個指令即可將第三方套件庫匯入。

在加入第三方套件來源的「add-apt-repository」指令中,在Ubuntu 18.04開始,會在加入後自動執行更新套件來源的動作,因次指令「sudo apt-get update」變成可做與可不做。


sudo add-apt-repository ppa:ondrej/php -y

sudo apt-get update

那有出現類似下面的截圖,就代表已經成功的把此第三方PHP來源套件成功匯入了。

接下來,我們可以透過下面的指令搜尋到有關的PHP套件。

不過裡面居然還有收錄「PHP-5.6」的,讓我深感意外……


sudo apt-cache search php | grep "php7.*-cli"

sudo apt-cache search php | grep "php5.*-cli"

分別執行這兩個指令之後,就會得到下面的截圖結果。

安裝PHP 7.0

把我們需要的PHP 7.0都匯入好之後,接著就可以安裝要的PHP版本了。

依照下面的指令來安裝PHP 7.0相關的擴展


sudo apt-get update

sudo apt-get install php7.0

當然,有些擴展可能我們會沒有安裝到,需要執行指令來另外安裝。

比如說,我們想要名為「mbstring」擴展,就要執行下面指令安裝。


sudo apt-get update

sudo apt-get install php7.0-mbstring

注意到了嘛?上面是示範安裝「PHP 7.0」部份,我們不難發現,若是要安裝其他的版本,則只要將「7.0」改成「7.1」,「7.2」與「7.3」等字樣即可。

在終端機上切換多個版本

在終端上「terminal」,我們可以使用下列的指令進入互動模式輕易的做到多版本切換:


sudo update-alternatives --config php

接著就會出現跟下面一樣的截圖,選擇相對應的數字即可切換到想要的PHP版本。

若是不想進入互動模式,也可以直接設定執行PHP版本路徑。


sudo update-alternatives --set php /usr/bin/php7.1

在Nginx上切換多個版本

前一章節中為示範在終端機上切換多個PHP版本,那在Nginx上也可以做到同樣的事情。

我們只要使用下面幾個步驟,即可在Nginx上面切換多個版本。

安裝Nginx

如果安裝了,這步驟可以先跳過。


sudo apt-get update

sudo apt-get install nginx

安裝相對應版本的PHP FPM

FPM, 全名是「Fast CGI process manager」,Nginx是把PHP當作Fast-CGI跑,因此需要安裝相對應PHP版本的FPM套件,我們可以使用下列指令來安裝:

安裝,PHP 7.0使用,套件名稱就是「php7.0-fpm」,PHP 7.1就是「php-7.1-fpm」,以此類推。


sudo apt-get update

sudo apt-get install php7.0-fpm

接著,修改Nginx sites設定。使用下列指令並找到下面相關的語句把註解拿掉以便啟用PHP-FPM。


sudo vim /etc/nginx/sites-available/default


# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}

 

其中,注意到「fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;」這行。

不難發現這是需要指定我們真正要運行的PHP 7.1的版本。那其他版本也是照之前的規則做更動。

下面的指令步驟即是在Nginx上面切換不同版本PHP-FPM,假設使用PHP 7.0


sudo update-alternatives --config php

sudo service php7.0-fpm start

# 找到有-fpm.sock等字樣並取代成相對應的php-fpm.sock

sudo sed -i 's/php7.*-fpm.sock/php7.0-fpm.sock/g' /etc/nginx/sites-available/default

sudo service nginx restart

結論

這篇文章,你已經學到了:

  1. 在Ubuntu 18.04上安裝與管理多個PHP版本
  2. 在終端機與Nginx上切換與使用不同PHP版本

參考文章與延伸閱讀

 

安裝Hue管理HBase資料庫

前言

由於工作的關係,需要將HBase安裝好之後,找一個能夠管理資料庫的介面,找了又找,最後找了這個,叫做Hue的資料庫管理介面。本文章中,會教導該如何在Ubuntu 16.04上面將此資料庫管理介面安裝起來並執行。

前置環境

在安裝Hue之前,需要有下列的環境與先需先安裝好幾個套件。

  • 一個乾淨的Ubuntu 16.04
  • 已經安裝好Hadoop與HBase,若尚未安裝,請先參考這篇文章
  • 因為需要編譯,需要安裝好編譯的工具與編譯期間需要用到的函式庫。
    # 更新套件的鏡像來源
    sudo apt-get update
    sudo apt-get install maven \
    git-core \
    make \
    libffi-dev \
    python-dev \
    krb5-config \
    libkrb5-dev \
    libssl-dev \
    libsasl2-dev \
    libsasl2-modules-gssapi-mit \
    libldap2-dev \
    libxml2 \
    libxml2-dev \
    libxslt1.1 \
    libxslt1-dev \
    libsqlite3-dev \
    libgmp3-dev \
    libmysqlclient-dev
    

    安裝編譯工具

    sudo apt-get install build-essential autoconf libtool pkg-config python-opengl python-imaging python-pyrex python-pyside.qtopengl idle-python2.7 qt4-dev-tools qt4-designer libqtgui4 libqtcore4 libqt4-xml libqt4-test libqt4-script libqt4-network libqt4-dbus python-qt4 python-qt4-gl libgle3 python-dev
    

下載Hue專案

在本次步驟,我們使用Git指令將Hue專案下載回來。


git clone https://github.com/cloudera/hue

編譯Hue Web App

下載Hue專案回來之後,接著切換到hue專案底下,並執行make apps


cd ~/hue

make apps

編譯完成之後,我們可以使用下面的指令試著將server跑起來。


build/env/bin/hue runserver

跑起來之後,用瀏覽器訪問,localhost:8000就可以看到如下的畫面了。

成功之後,記得按下ctrl+c停止Hue server並回到原來打指令的模式。

設定HBase

在正式將Hue server弄起來之前,需要先將HBase設定好。

首先,先使用root使用者執行 netstat指令查看9090是否有人使用。


sudo netstat -nl|grep 9090

確定沒有人使用之後,則切換到/usr/local/hbase/bin底下並執行下面的指令


hbase-daemon.sh start thrift

執行完成上述的指令之後,我們可以使用jps指令,並可以看到多了一個叫做ThriftServer的跑起來了。

設定Hue設定檔

接著我們要在Hue中設定有關於HBase的相關設定。照著下面指令,將設定檔案開啟。


vim ~/hue/desktop/conf/pseudo-distributed.ini

接著找到[hbase]的設定地方,按照下面的截圖,把一些設定前面的註解拿掉與修改設定值。

完成之後,Hue的HBase相關設定就完成了。

用Nginx反向代理讓外網也可連Hue

因為Hue跑此server的時候,只在內網跑,監聽的位址是localhost,也就是127.0.0.1

那我們如果是使用VPS,把Hue架設與運行起來好之後,我們在外網是看不到server的畫面。因此我們可以安裝Nginx並使用反向代理的方式,把畫面接出來。

首先先安裝Nginx


sudo apt-get update

sudo apt-get install nginx

設定反向代理的位址


# 打開Nginx設定檔

sudo vim /etc/nginx/sites-available/default

找到下面的location / 區塊,把區塊中內容改成下面的設定,接著存檔並離開。


location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
proxy_pass http://localhost:8000;
}

檢查Nginx設定檔是否有誤


sudo nginx -t

看到下面的截圖之後,就代表設定檔的語法沒有問題。

重新載入Nginx服務


sudo service nginx reload

做完上述的設定之後,我們在使用nohup指令將Hue server跑在背景執行。


nohup build/env/bin/hue runserver &

執行完nohup之後,記得要再按一次enter鍵,才會回到原來指令模式。

接著可以用ps指令查看Hue是不是正確在背景中執行,若正確的話,會與如下圖一樣,途中,黃色部份的PID會有所不同,是正常的。

若有需要設定Hue的話,則先需要將這兩個process停止,停止的方式則是用kill指令,並在kill 後面加入要kill 的 PID,若以下面的截圖作為例子,則是將8136與8146停止,其指令如下:


kill 8136 8146

參考資料

 

在Ubuntu 16.04上安裝HBase

前言

在前面的文章中,我們已經把Hadoop安裝起來了,那本篇文章,則是要接續前面的部份,將HBase也一併安裝起來。

前置條件

  • 需要完整的安裝並正常運行Hadoop,若還沒完成者,請先到此篇文章進行安裝。

第一步:下載HBase壓縮檔

這邊一樣,我們先使用wget指令下載HBase壓縮檔,下載完成之後,進行解壓縮並把整個檔案移到/usr/local/hbase,並將使用者權限修改為hadoop,相關指令如下。
這裡示範安裝HBase版本為1.4.7


wget http://apache.mirror.gtcomm.net/hbase/stable/hbase-1.4.7-bin.tar.gz
tar -zxvf hbase-1.4.7-bin.tar.gz
sudo mv hbase-1.4.7 /usr/local/hbase/
sudo chown -R hadoop /usr/local/hbase/

第二步:設定HBase環境變數

依照下面的方式,在~/.bashrc中設定相關的環境變數


export HBASE_HOME=/usr/local/hbase
export PATH=$PATH:$HBASE_HOME/bin

設定完成之後,別忘了使用source指令進行重新載入.bashrc檔

第三步:設定hbase-env.sh

在hbase-env.sh設定檔中,設定JAVA_HOME環境變數。相關指令如下:


cd /usr/local/hbase/conf

vim hbase-env.sh

並加入這一行:export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

編輯/usr/local/hbase/conf/hbase-site.xml設定檔案並將下列內容加到<configuration></configuration>之間,其內容如下:


<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:9000/hbase</value>
</property>

<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop/zookeeper</value>
</property>

<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>

第四步:執行HBase

使用下面的指令將HBase跑起來。


/usr/local/hbase/bin/start-hbase.sh

一樣,在執行過程中會需要打密碼,那就打hadoop使用者的密碼。

執行成功後如截圖所示:

接著執行HBase shell。


hbase shell

執行成功後如下截圖所示:

我們可以在HBase shell底下執行status命令來查看有沒有出現錯誤,若成功的話,可以得到下面截圖的結果。

也可以用網頁的方式查看目前HBase的狀態。其拜訪網址如下:


http://ip-address-or-domain-name:16010

總結

啟動HBase執行script順序如下:


start-hdfs.sh
start-yarn.sh

start-hbase.sh

結束HBase之script順序如下:


stop-hbase.sh

stop-dfs.sh
stop-yarn.sh

每個script檔案擺放路徑就不在此一一贅述,可以去先前的文章內容中找到相對應的script檔案路徑。

Hadoop + HBase對於硬體資源是很要求的。我在自租的VPS,太差的配備是跑不起來的。

以個人的經驗來說,CPU建議至少要再4core至6core才夠用,RAM大約在16G會比較好一點,我是在DigitalOcean上面跑起來的。選用的方案是6core+16G的Droplet方案。

參考資料

在Ubuntu 16.04中安裝Hadoop

前言

因為工作上的需要,需要建置HBase當做資料儲存的空間,而這個同樣也是一個No-SQL資料庫。至於什麼是No-SQL DB,則不在此文章的範圍內,可以自行去查詢了解。

在本篇文章中,會教導該如何在Ubuntu 16.04中,將Hadoop與HBase架設起來。

前置環境

下面則是列出所需要的環境。

  • 一台乾淨且裝有Ubuntu 16.04的主機

安裝Hadoop

在本章節中,教導使用者們一步一步的安裝好Hadoop,可能在這裡會問:我只需要HBase,但是一定要安裝Hadoop嘛?答案是肯定的,因為HBase這個資料庫是相依於Hadoop,因此需要先安裝好Hadoop,才可以安裝HBase。

第一步:登入主機

首先先使用ssh登入到我們的主機


ssh user-name@ip-address-or-domain-name

第二步:建立hadoop使用者

在建立Hadoop之前,需要先建立一個名為hadoop使用者給Hadoop使用。先使用下面指令建立一個使用者。


sudo useradd -m hadoop -s /bin/bash


接著為這個hadoop使用者設置一個密碼,注意:密碼會需要輸入兩次來做確認


sudo passwd hadoop

為了增加目錄權限操作方便,我們將hadoop這個使用者設定有root權限可以使用,設定方式如下指令:


sudo adduser hadoop sudo


到這裡,就把Hadoop需要的使用者建立完成了,記得使用下面指令切換使用者再進行下一步!


su hadoop

第三步:更新鏡像來源並安裝JAVA環境

在Ubuntu底下,安裝任何的套件前,我們都會使用下面的指令先更新好鏡像來源網址。


sudo apt-get update

sudo apt-get install default-jdk default-jre

安裝好JAVA環境之後,可以使用下面的指令做測試:


java -version

如下圖所示:

第四步:設定JAVA環境執行路徑

在本步驟中,需要設定JAVA_HOME環境變數。

先編輯在家目錄下面的.bashrc檔案。


vim ~/.bashrc

接著加入路徑,注意:路徑有可能不同,需要自己設定正確的相對應路徑


export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
# 設定後面所需要用到的Hadoop相關執行路徑

export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

設定完成之後,再執行source指令將此環境變數載入。


source ~/.bashrc

接著可以使用,whereis java與java -version這兩個指令做驗證。


whereis java

java -version

其結果如下圖所示:

第五步:安裝Hadoop

我們這邊選用的是2.8.5的版本,使用wget指令來進行下載壓縮檔。


wget http://apache.mirror.gtcomm.net/hadoop/common/hadoop-2.8.5/hadoop-2.8.5.tar.gz

第六步

  • 解壓縮Hadoop壓縮檔到/usr/local資料夾
  • 切換資料夾至/usr/local
  • 將資料夾名稱重新命名
  • 將/usr/local/hadoop切換權限給hadoop使用者

sudo tar -zxf ~/hadoop-2.8.5.tar.gz

cd /usr/local

sudo mv ~/hadoop-2.8.5/ ./hadoop

sudo chown -R hadoop /usr/local/hadoop

第七步:驗證Hadoop是否可以運行

下面指令可以幫助我們驗證hadoop是否可以正常運行


cd /usr/local/hadoop

./bin/hadoop version

如果可以成功運行的話,如下面截圖所示:

第八步:偽分佈式Hadoop

Hadoop允許可以使用兩個分離的process運行,意思就是一個當NameNode一個當DataNode,同時讀取的是HDFS文件。

要修改成此模式需要修改core-site.xml與hdfs-site.xml這兩個設定檔案。

Hadoop設定文件是以XML格式,每個設定的property都有起始與結尾標籤,在標籤裡面放置的是設定值。

先開啟,core-site.xml檔案。


cd /usr/local/hadoop

vim ./etc/hadoop/core-site.xml

接著在<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>

接著,修改hdfs-site.xml設定檔案


cd /usr/local/hadoop

vim ./etc/hadoop/hdfs-site.xml

一樣在<configuration>與</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>

設定完成後,接著就可以使用下面指令執行NameNode初始化。


cd /usr/local/hadoop

./bin/hdfs namenode -format

執行完成之後,可以注意到這兩行,若是一樣,則代表執行成功。

第九步:執行NameNode與DataNode process

使用下面的指令執行與啟動NameNode與DataNode process


cd /usr/local/hadoop

./sbin/start-dfs.sh

執行此process期間,會使用到ssh相關的登入,因次遇到yes就輸入yes。

遇到打密碼,就打hadoop使用者的密碼。

若在執行過程中出現「localhost: Error: JAVA_HOME is not set and could not be found.」等字樣,則需要在/usr/local/hadoop/etc/hadoop/hadoop-env.sh 底下設定JAVA_HOME環境變數


export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

設定完成之後,再執行一次:./sbin/start-dfs.sh就會成功了。其成功截圖畫面如下:

設定好之後,使用網路瀏覽器拜訪網址:http://ip-address-or-domain-name:50070,就可以看到運行的狀態頁面了。

第十步:啟動yarn

首先,先執行下面的指令,修改檔案名稱並進行mapred-site.xml編輯。


cd /usr/local/hadoop

mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml

vim ./etc/hadoop/mapred-site.xml

接著在<configuration>與</configuration>中加入下面的設定標籤。


<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

接著設定yarn-site.xml設定檔。


cd /usr/local/hadoop

vim ./etc/hadoop/yarn-site.xml

在<configuration>與</configuration>標籤中加入下面的設定值。


<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

接著就可以啟動yarn了。當然,中間會打密碼執行。

執行下面指令來啟動,啟動完成之後,可以拜訪:http://ip-address-or-domain-name:8088/cluster來看目前所有的叢集(cluster)的狀態與資訊。


cd /usr/local/hadoop

./sbin/start-yarn.sh

# 啟動背景 web server 查看歷史運作紀錄

./sbin/mr-jobhistory-daemon.sh start historyserver

後記

  • 如果使用較低方案的VPS 方案做練習的話,會跑不起來,原因是因為RAM太小不夠。因此需要使用與這篇文章來設定swap來達到這個目的。
  • 有的時候ssh連線是使用非port number 22,因此需要使用到HADOOP_SSH_OPTS來設定port number。設定此環境變數在.bashrc檔案即可,記得使用source 重新載入此檔案。設定環境變數如下,22是我們可以修改的port number:
    export HADOOP_SSH_OPTS="-p 22"
    

參考資料

下一篇將介紹如何安裝:HBase