Kubernetes部署大資料元件系列一:一鍵部署Zookeeper叢集
目前的大資料平臺存在的問題:
- 通過手工方式直接部署在物理機上,過程複雜、效率低,不適合大規模叢集的部署和動態擴容。
- 由於平臺元件繁多,對宿主機底層庫依賴過高,一旦安裝完成,很難進行遷移,也無法做成模版進行重複使用。
- 元件升級不夠靈活,往往會對有相同底層依賴的其他元件帶來影響。
- 採用虛機部署時,會對宿主機產生資源浪費、開銷大。
- 物理機或虛機關啟等管理操作速度較慢。
- 無法在同一套物理叢集上部署多套大資料平臺,使用虛機的方案太耗費資源。
針對上述問題,我們打算用時下流行的Docker容器來封裝大資料各個元件,用Google的神器Kubernetes來編排這些Docker容器,最終達到:
- 平臺能夠自動化的快速部署(小規模叢集能夠達到秒級)、動態擴容。
- 平臺構建一次,就能夠形成模版重複使用、靈活遷移。
- 平臺構建一次,就能夠靈活部署在不同的環境中(比如公有云、私有云、裸機,虛擬機器)。
- 元件能夠靈活升級、靈活替代。
- 消除線上線下環境不一致導致的問題,再也不會有“在我的機器上執行的好好的”這種託詞。
- 因為其多資源的低消耗,在物理叢集上能同時部署多套大資料平臺,供不同部門獨 享。
- 很適合持續整合/持續部署(CI/CD)的環境,因為可以自動的下載、綠色的安裝和徹底清除應用程式,不會影響宿主機的環境。
本篇是該系列的第一篇,手把手教你通過K8s部署zookeeper叢集,涉及到的概念,各位看官自行腦補,我只講一下部署過程,直接上乾貨了。
- 使用Kargo搭建Kubernetes 1.6叢集:
地址 | 角色 |
---|---|
10.0.7.14 | Ansible Client (Kargo用到的工具) |
10.0.8.182 | Master, NODE 1 |
10.0.8.183 | NODE 2 |
1,我用筆記本(macOS系統),作為Ansible client。先新建一個資料夾kargo,把kargo.tgz放進去並解壓,目錄結構如下:
2,需要安裝python 2.7、pip 9.0.1、python-netaddr、ansible 2.3.1.0等工具 [ansible安裝]http://valdhaus.co/writings/ansible-mac-osx/
3,修改 inventory/inventory.cfg
wangliangdeMacBook-Pro:kargo wangliang$ pwd /Users/wangliang/kargo/kargo wangliangdeMacBook-Pro:kargo wangliang$ vim inventory/inventory.cfg [all] node1 ansible_user=app ansible_host=10.0.8.182 ip=10.0.8.182 access_ip=10.0.8.182 node2 ansible_user=app ansible_host=10.0.8.183 ip=10.0.8.183 access_ip=10.0.8.183 [kube-master] node1 ip=10.0.8.182 access_ip=10.0.8.182 [kube-node] node1 node2 [etcd] node1 [k8s-cluster:children] kube-node kube-master [calico-rr]
4,分別在10.0.8.182(Node 1)、10.0.8.183(Node 2)上做如下操作:
首先安裝Docker 1.13.1,並啟動服務
[Ubuntu安裝Docker]http://www.linuxidc.com/Linux/2017-01/139985.htm
其次把kargo_images_v1.6.1.tar.gz 拷貝到要安裝k8s的節點上,放到k8s資料夾內,並解壓,目錄結構如下:
5,在kargo_images_v1.6.1目錄下,進入bash,執行:
➜ k8s cd kargo_images_v1.6.1
➜ kargo_images_v1.6.1 pwd
/data/k8s/kargo_images_v1.6.1
➜ kargo_images_v1.6.1 bash
[email protected]:/data/k8s/kargo_images_v1.6.1$images=$(ls -l ../kargo_images_v1.6.1|awk -F' ' '{ print $9 }')
[email protected]:/data/k8s/kargo_images_v1.6.1$ for x in ${images[*]}; do sudo docker load -i $x; done
將目錄下的映象放入docker images。
6, Node1、Node2和Mac間都要SSH免密,Mac上還要開啟共享裡面的允許遠端訪問
Node1、Node2、Mac都在使用者目錄下執行
➜ ~ cd /home/app
ssh-keygen -t rsa #一路回車就行
Generating public/private rsa key pair.
Enter file in which to save the key (/home/app/.ssh/id_rsa):
Created directory '/home/app/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/app/.ssh/id_rsa.
Your public key has been saved in /home/app/.ssh/id_rsa.pub.
The key fingerprint is:
7c:f4:2f:21:f2:85:7f:20:38:02:1d:ef:79:39:b6:be [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
| . |
| . o |
| . . . . |
| . o + + |
| . S X = |
| . B B + |
| o o o |
| . o |
| E. |
+-----------------+
➜ ~ cd /home/app/.ssh
➜ .ssh ssh-copy-id Node2
➜ .ssh ssh-copy-id Mac
每次執行,步驟都如下類似:
The authenticity of host 'Node1 (10.0.8.183)' can't be established.
ECDSA key fingerprint is 91:1a:13:a8:57:2b:a0:42:4d:aa:c9:83:c3:33:16:f9.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'Node2'"
and check to make sure that only the key(s) you wanted were added.
所有虛機都執行完成後,可以通過ssh hostname來檢視之間是否ssh連線已經免密了,如下測試
➜ ~ ssh 10.0.8.183
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-62-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
180 packages can be updated.
75 updates are security updates.
Last login: Wed Jun 28 09:16:54 2017 from 10.0.7.14
➜ ~
7,在Ansible client(Mac)上執行
$ ansible-playbook -i ~/kargo/inventory/inventory.cfg cluster.yml -b -v --user=username --ask-sudo-pass
安裝成功,在Mac上可以看到如下輸出:
在Node 1上可以看到:
遇到的錯誤:
1,有如下錯誤:
kubectl The connection to the server localhost:8080 was refused
修改了vim inventory/group_vars/k8s-cluster.ym 裡面的8080為28080,避免和別人衝突,又有如下錯誤:
kubernetes/master : Master | wait for the apiserver to be running
原因是apiserver的映象起不了,無法提供服務
懷疑可能是不支援docker 1.17版本,所以更換為docker 1.13.1版本子再次安裝後沒有上述錯誤了,安裝成功。切記,要用docker 1.13.1版本。
2,如果按照上述操作始終沒有成功,可以把節點上的
/run/kubernetes
/etc/kubernetes
都刪除,然後把docker也都解除安裝重新裝。然後在Ansible client節點上重新部署就可以啦。
- 使用Dockerfile製作包含zkui 2.0 的Zookeeper 3.4.10版本的映象:
1,建立你要做docker的目錄,結構如下:
2,其中Dockerfile如下:
FROM openjdk:8-jre-alpine
MAINTAINER Wang Liang <[email protected]>
# Install required packages
RUN apk add --no-cache \
bash \
su-exec
ENV ZOO_USER=zookeeper \
ZOO_CONF_DIR=/conf \
ZOO_DATA_DIR=/data \
ZOO_UI_DIR=/zkui \
ZOO_DATA_LOG_DIR=/datalog \
ZOO_PORT=2181 \
ZOO_TICK_TIME=2000 \
ZOO_INIT_LIMIT=5 \
ZOO_SYNC_LIMIT=2
# Add a user and make dirs
RUN set -x \
&& adduser -D "$ZOO_USER" \
&& mkdir -p "$ZOO_DATA_LOG_DIR" "$ZOO_DATA_DIR" "$ZOO_CONF_DIR" \
&& chown "$ZOO_USER:$ZOO_USER" "$ZOO_DATA_LOG_DIR" "$ZOO_DATA_DIR" "$ZOO_CONF_DIR"
ARG GPG_KEY=C823E3E5B12AF29C67F81976F5CECB3CB5E9BD2D
ARG DISTRO_NAME=zookeeper-3.4.10
# Download Apache Zookeeper, verify its PGP signature, untar and clean up
RUN set -x \
&& apk add --no-cache --virtual .build-deps \
gnupg \
&& wget -q "http://www.apache.org/dist/zookeeper/$DISTRO_NAME/$DISTRO_NAME.tar.gz" \
&& wget -q "http://www.apache.org/dist/zookeeper/$DISTRO_NAME/$DISTRO_NAME.tar.gz.asc" \
&& export GNUPGHOME="$(mktemp -d)" \
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-key "$GPG_KEY" \
&& gpg --batch --verify "$DISTRO_NAME.tar.gz.asc" "$DISTRO_NAME.tar.gz" \
&& tar -xzf "$DISTRO_NAME.tar.gz" \
&& mv "$DISTRO_NAME/conf/"* "$ZOO_CONF_DIR" \
&& rm -r "$GNUPGHOME" "$DISTRO_NAME.tar.gz" "$DISTRO_NAME.tar.gz.asc" \
&& apk del .build-deps
ADD zkui-master $ZOO_UI_DIR
WORKDIR $DISTRO_NAME
VOLUME ["$ZOO_DATA_DIR", "$ZOO_DATA_LOG_DIR"]
EXPOSE $ZOO_PORT 2888 3888
ENV PATH=$PATH:/$DISTRO_NAME/bin:$ZOO_UI_DIR \
ZOOCFGDIR=$ZOO_CONF_DIR
COPY docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]
3,docker-entrypoint.sh如下:
#!/bin/bash
set -e
# Allow the container to be started with `--user`
if [ "$1" = 'zkServer.sh' -a "$(id -u)" = '0' ]; then
chown -R "$ZOO_USER" "$ZOO_DATA_DIR" "$ZOO_DATA_LOG_DIR"
exec su-exec "$ZOO_USER" "$0" "[email protected]"
fi
# Generate the config only if it doesn't exist
if [ ! -f "$ZOO_CONF_DIR/zoo.cfg" ]; then
CONFIG="$ZOO_CONF_DIR/zoo.cfg"
echo "clientPort=$ZOO_PORT" >> "$CONFIG"
echo "dataDir=$ZOO_DATA_DIR" >> "$CONFIG"
echo "dataLogDir=$ZOO_DATA_LOG_DIR" >> "$CONFIG"
echo "tickTime=$ZOO_TICK_TIME" >> "$CONFIG"
echo "initLimit=$ZOO_INIT_LIMIT" >> "$CONFIG"
echo "syncLimit=$ZOO_SYNC_LIMIT" >> "$CONFIG"
for server in $ZOO_SERVERS; do
echo "$server" >> "$CONFIG"
done
fi
if [ -f "$ZOO_UI_DIR/config.cfg" ]; then
CONFIG="$ZOO_UI_DIR/config.cfg"
echo "serverPort=$ZOO_UI_PORT" >> "$CONFIG"
echo "zkServer=$ZOO_UI_SERVER" >> "$CONFIG"
fi
# Write myid only if it doesn't exist
if [ ! -f "$ZOO_DATA_DIR/myid" ]; then
echo "${ZOO_MY_ID:-1}" > "$ZOO_DATA_DIR/myid"
fi
cd $ZOO_UI_DIR
exec nohup java -jar zkui-2.0-SNAPSHOT-jar-with-dependencies.jar &
exec zkServer.sh start-foreground
執行
➜ wldocker sudo docker build -t zookeeper_3.4.10_zkui_2.0:0.0.1 .
就可以製作出包含ZKUI的zookeeper 3.4.10的docker映象了
把該映象上傳到HARBOR庫,稍後k8s編排時會用到。
- 通過Kubernetes 編排啟動Zookeeper叢集:
我們採取的方案是每個zkserver屬於一個pod,每個pod繫結一個物理主機。
只需要完成yaml檔案即可:
zk-1.yaml:
---
apiVersion: v1
kind: Service
metadata:
name: zk-1-svc
labels:
app: zk-1-svc
spec:
ports:
- port: 2888
name: server
- port: 3888
name: leader-election
- port: 2181
name: client
- port: 9999
name: zkui
selector:
app: zk-1
type: NodePort
---
apiVersion: v1
kind: ConfigMap
metadata:
name: zk-1-cm
data:
jvm.heap: "1G"
tick: "2000"
init: "10"
sync: "5"
client.cnxns: "60"
snap.retain: "3"
purge.interval: "0"
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: zk-1
spec:
replicas: 1
template:
metadata:
labels:
app: zk-1
spec:
nodeSelector:
zk: zk-1
containers:
- name: myzk
imagePullPolicy: IfNotPresent
image: registry.k8s.intra.knownsec.com/bigdata/zookeeper_3.4.10_zkui_2.0:0.0.1
resources:
requests:
memory: "2Gi"
cpu: "500m"
ports:
- containerPort: 2181
name: client
- containerPort: 2888
name: server
- containerPort: 3888
name: leader-election
- containerPort: 9999
name: zkui
env:
- name : ZK_HEAP_SIZE
valueFrom:
configMapKeyRef:
name: zk-1-cm
key: jvm.heap
- name : ZK_TICK_TIME
valueFrom:
configMapKeyRef:
name: zk-1-cm
key: tick
- name : ZK_INIT_LIMIT
valueFrom:
configMapKeyRef:
name: zk-1-cm
key: init
- name : ZK_SYNC_LIMIT
valueFrom:
configMapKeyRef:
name: zk-1-cm
key: tick
- name : ZK_MAX_CLIENT_CNXNS
valueFrom:
configMapKeyRef:
name: zk-1-cm
key: client.cnxns
- name: ZK_SNAP_RETAIN_COUNT
valueFrom:
configMapKeyRef:
name: zk-1-cm
key: snap.retain
- name: ZK_PURGE_INTERVAL
valueFrom:
configMapKeyRef:
name: zk-1-cm
key: purge.interval
- name: ZK_CLIENT_PORT
value: "2181"
- name: ZK_SERVER_PORT
value: "2888"
- name: ZK_ELECTION_PORT
value: "3888"
- name: ZOO_MY_ID
value: "1"
- name: ZOO_SERVERS
value: "server.1=0.0.0.0:2888:3888 server.2=zk-2-svc:2888:3888"
- name: ZOO_UI_PORT
value: "9999"
- name: ZOO_UI_SERVER
value: "zk-1-svc:2181,zk-2-svc:2181"
# readinessProbe:
# exec:
# command:
# - "zkok.sh"
# initialDelaySeconds: 10
# timeoutSeconds: 5
# livenessProbe:
# exec:
# command:
# - "zkok.sh"
# initialDelaySeconds: 10
# timeoutSeconds: 5
volumeMounts:
- name: data
mountPath: /data
- name: datalog
mountPath: /datalog
volumes:
- name: data
hostPath:
path: /data/k8s/zookeeper/data
- name: datalog
hostPath:
path: /data/k8s/zookeeper/datalog
zk-2.yaml:
---
apiVersion: v1
kind: Service
metadata:
name: zk-2-svc
labels:
app: zk-2-svc
spec:
ports:
- port: 2888
name: server
- port: 3888
name: leader-election
- port: 2181
name: client
- port: 9999
name: zkui
selector:
app: zk-2
type: NodePort
---
apiVersion: v1
kind: ConfigMap
metadata:
name: zk-2-cm
data:
jvm.heap: "1G"
tick: "2000"
init: "10"
sync: "5"
client.cnxns: "60"
snap.retain: "3"
purge.interval: "0"
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: zk-2
spec:
replicas: 1
template:
metadata:
labels:
app: zk-2
spec:
nodeSelector:
zk: zk-2
containers:
- name: myzk
imagePullPolicy: IfNotPresent
image: registry.k8s.intra.knownsec.com/bigdata/zookeeper_3.4.10_zkui_2.0:0.0.1
resources:
requests:
memory: "2Gi"
cpu: "500m"
ports:
- containerPort: 2181
name: client
- containerPort: 2888
name: server
- containerPort: 3888
name: leader-election
- containerPort: 9999
name: zkui
env:
- name : ZK_HEAP_SIZE
valueFrom:
configMapKeyRef:
name: zk-2-cm
key: jvm.heap
- name : ZK_TICK_TIME
valueFrom:
configMapKeyRef:
name: zk-2-cm
key: tick
- name : ZK_INIT_LIMIT
valueFrom:
configMapKeyRef:
name: zk-2-cm
key: init
- name : ZK_SYNC_LIMIT
valueFrom:
configMapKeyRef:
name: zk-2-cm
key: tick
- name : ZK_MAX_CLIENT_CNXNS
valueFrom:
configMapKeyRef:
name: zk-2-cm
key: client.cnxns
- name: ZK_SNAP_RETAIN_COUNT
valueFrom:
configMapKeyRef:
name: zk-2-cm
key: snap.retain
- name: ZK_PURGE_INTERVAL
valueFrom:
configMapKeyRef:
name: zk-2-cm
key: purge.interval
- name: ZK_CLIENT_PORT
value: "2181"
- name: ZK_SERVER_PORT
value: "2888"
- name: ZK_ELECTION_PORT
value: "3888"
- name: ZOO_MY_ID
value: "2"
- name: ZOO_SERVERS
value: "server.1=zk-1-svc:2888:3888 server.2=0.0.0.0:2888:3888 "
- name: ZOO_UI_PORT
value: "9999"
- name: ZOO_UI_SERVER
value: "zk-1-svc:2181,zk-2-svc:2181"
# readinessProbe:
# exec:
# command:
# - "zkok.sh"
# initialDelaySeconds: 10
# timeoutSeconds: 5
# livenessProbe:
# exec:
# command:
# - "zkok.sh"
# initialDelaySeconds: 10
# timeoutSeconds: 5
volumeMounts:
- name: data
mountPath: /data
- name: datalog
mountPath: /datalog
volumes:
- name: data
hostPath:
path: /data/k8s/zookeeper/data
- name: datalog
hostPath:
path: /data/k8s/zookeeper/datalog
執行:
➜ zookeeper kubectl create -f zk-1.yaml
service "zk-1-svc" created
configmap "zk-1-cm" created
deployment "zk-1" created
➜ zookeeper kubectl create -f zk-2.yaml
service "zk-2-svc" created
configmap "zk-2-cm" created
deployment "zk-2" created
- 功能驗證:
➜ zookeeper kubectl get po #看po情況
NAME READY STATUS RESTARTS AGE
zk-1-1238243890-phcm8 1/1 Running 0 1m
zk-2-4022999611-x27vq 1/1 Running 0 1m
➜ zookeeper kubectl get po -o wide #看繫結物理節點情況
NAME READY STATUS RESTARTS AGE IP NODE
zk-1-1238243890-phcm8 1/1 Running 0 1m 11.233.112.152 yuyan1
zk-2-4022999611-x27vq 1/1 Running 0 1m 11.233.77.83 yuyan2
➜ zookeeper kubectl get service #看埠對映情況
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 11.233.0.1 <none> 443/TCP 4d
zk-1-svc 11.233.30.168 <nodes> 2888:31292/TCP,3888:30513/TCP,2181:31570/TCP,9999:30476/TCP 1m
zk-2-svc 11.233.27.68 <nodes> 2888:30906/TCP,3888:30842/TCP,2181:32473/TCP,9999:31490/TCP 1m
➜ zookeeper kubectl exec zk-2-4022999611-x27vq -t -i -- bash #進入容器看服務情況
bash-4.3# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: leader #選舉正常
提供對外訪問正常
相關推薦
Kubernetes部署大資料元件系列二:一鍵部署Hadoop叢集
系列一中忘了說明,用Kubernetes部署大資料容器平臺,有一個很大的好處是壓根不用操心容器間的網路通訊,不管是同一物理伺服器內,還是跨物理伺服器間的網路通訊,你都不用操心,只需要把容器間互相關心的埠暴露好,把容器間的service name對映好,就OK了。 本篇教大家部署Hadoop 2.7.3叢集,暫
Kubernetes部署大資料元件系列一:一鍵部署Zookeeper叢集
目前的大資料平臺存在的問題: 通過手工方式直接部署在物理機上,過程複雜、效率低,不適合大規模叢集的部署和動態擴容。 由於平臺元件繁多,對宿主機底層庫依賴過高,一旦安裝完成,很難進行遷移,也無法做成模版進行重複使用。 元件升級不夠靈活,往往會對有相同底層依賴的其他元件帶來影響。 採用虛機部署時,會對宿主機產生資
大資料HBase系列之HBase分散式資料庫部署
一、部署準備 1. 依賴框架 大資料Hadoop系列之Hadoop分散式叢集部署:https://blog.csdn.net/volitationLong/article/details/80285123 大資料Zookeeper系列之Zookeeper叢集部署:https://
大資料系列1:一文初識Hdfs
最近有位同事經常問一些Hadoop的東西,特別是Hdfs的一些細節,有些記得不清楚,所以趁機整理一波。 會按下面的大綱進行整理: 1. 簡單介紹``Hdfs`` 2. 簡單介紹``Hdfs``讀寫流程 3. 介紹``Hdfs HA``實現方式 4. 介紹``Yarn``統一資源管理器 5. 追一下``
Kubernetes與大資料之二:編譯並執行基於Scalar的Spark程式WordCount
一、前言 通過SBT編譯scala程式然後在Kubernetes使用Spark執行WordCount任務。 轉載自https://blog.csdn.net/cloudvtech 二、安裝環境和編譯 2.1 安裝SBT mv bintray-sbt-rpm
大資料學習系列8-Centos6.7 hadoop-2.6.5下sqoop-1.4.6的安裝部署
安裝sqoop的前提是已經具備java和hadoop的環境 1、下載並解壓 2、修改配置檔案 $ cd $SQOOP_HOME/conf $ mv sqoop-env-template.sh sqoop-env.sh 開啟sqoop-env.sh並編輯下面幾
《架構系列四:一鍵部署應用到Tomcat叢集中》
基於前面的《架構系列三:使用Keepalived+Nginx+tomcat實現叢集部署》,我們配置了nginx+Tomcat叢集,如果需要在VM1,VM2各部署6個Tomcat,這時候怎麼將應用部署到叢集中呢,如果手動一個一個的部署,那要部署12次,效率非常底,因此我們迫切需要一鍵自動部
大資料生態系統基礎:Apache Kafka基礎(一):介紹和安裝
http://blog.csdn.net/zhy_yz/article/details/5905637 一、 Apache kafka基礎介紹 1、kafka 是什麼? 首先一句話: Apache Kaf
初學大資料之模組整合:Pycharm安裝numpy,scipy,sklearn等包時遇到的各種問題的一鍵解決方法
最近在學習機器學習,要用Python寫程式,習慣了用IDE軟體,所以就使用Pycharm軟體。但是在匯入類似numpy,sklearn等模組的時候,發現了各種問題(如Python版本與模組之間的相容等各類問題),上網找了許多方法,最後總算總結出了這條最快捷的方法
CM+CDH構建企業大資料平臺系列(一)
問題導讀:1、CM是什麼?2、CDH是什麼?3、CM+CDH是什麼?4、什麼是企業大資料平臺?5、如何用CM+CDH構建企業大資料平臺?..........帶著種種疑問讓我們開啟真正的企業級大資料平臺搭建之旅。 隨著網際網路,尤其是移動網際網路和智慧移動裝置的高速發展和
Android自定義控制元件系列七:詳解onMeasure()方法中如何測量一個控制元件尺寸(一)
自定義view/viewgroup要重寫的幾個方法:onMeasure(),onLayout(),onDraw()。(不熟悉的話可以檢視專欄的前幾篇文章:)。 今天的任務就是詳細研究一下protected void onMeasure(int wid
大資料生態系統基礎: HBASE(一):HBASE 介紹及安裝、配置
一、介紹 Apache HBase是Hadoop資料庫,一個分散式的、可伸縮的大型資料儲存。 當您需要隨機的、實時的讀/寫訪問您的大資料時,請使用Apache HBase。這個專案的目標是承載非常大的表——數十億行X百萬列的列——執行在在商用硬體
用Ambari一鍵部署大資料平臺
安裝前準備先明確幾個概念: 1. Ambari只能安裝Hortonworks Data Platform,即Hortonworks的開源Hadoop,不支援Apach的Hadoop平臺; 2. 對於已經安裝了Apach Hadoop或者其他Hadoop平臺的,不能使用Amba
Android自定義控制元件系列二:自定義開關按鈕(一)
這一次我們將會實現一個完整純粹的自定義控制元件,而不是像之前的組合控制元件一樣,拿系統的控制元件來實現;計劃分為三部分:自定義控制元件的基本部分,和自定義控制元件的自定義屬性; 下面就開始第一部分的編寫,本次以一個定義的開關按鈕為例,下面就開始吧: 先看看效果,一個點選開
Skype For Business 2015綜合部署系列二:AD域部署等Skype 安裝先決條件
自動申請證書策略 server 2012 搭建域環境 server 2012 配置ca skype 2015部署 skype 2015 配置dns相關記 本篇博文進入Skype for business 2015 綜合部署系列的第二部分:配置AD域環境、安裝Ca證書、配置自動申請證書策略
Docker教程系列五:Docker上部署tomcat
order targe borde tab 網站 web 系列 pull true 1下載tomcat鏡像(7-jre8代表tomcat7和java jdk8,tomcat需要java環境,點擊下面連接可以查看可下載的版本) 查看可下載版本 docker pull
Docker教程系列六:Docker上部署Nginx
res host format 系列 ive nec efault bin con 1下載Nginx鏡像 docker pull nginx 2創建Nginx容器 docker run -di --name=nginx -p 80:80 nginx
Docker教程系列七:Docker上部署Redis
客戶 style pull table 客戶端測試 border docker pac idt 1下載Redis鏡像 docker pull redis 2創建Redis容器 docker run -di --name=redis -p 6379:
zookeeper系列之:獨立模式部署zookeeper服務
pat 觀察 系統環境 centos 復制 init pac 很多 編輯 一、簡述 獨立模式是部署zookeeper服務的三種模式中最簡單和最基礎的模式,只需一臺機器即可,獨立模式僅適用於學習,開發和生產都不建議使用獨立模式。本文介紹以獨立模式部署zookeeper服務
大資料元件GC問題
GC,指Garbage Collection 是JAVA中的垃圾收集器。 相關元件的常見GC問題 1、Namenode的堆記憶體配置過小導致頻繁產生full GC導致namenode宕機,在hadoop中,資料的寫入&讀取經由namenode,所以namenode的jvm記憶體需