#
本教程使用 JDK 6 和 Tomcat 7,其他版本類似。
基本步驟:
使用 java 創建一個 keystore 文件
配置 Tomcat 以使用該 keystore 文件
測試
配置應用以便使用 SSL ,例如 https://localhost:8443/yourApp
1. 創建 keystore 文件
執行 keytool -genkey -alias tomcat -keyalg RSA 結果如下
loiane:bin loiane$ keytool -genkey -alias tomcat -keyalg RSA
Enter keystore password: password
Re-enter new password: password
What is your first and last name?
[Unknown]: Loiane Groner
What is the name of your organizational unit?
[Unknown]: home
What is the name of your organization?
[Unknown]: home
What is the name of your City or Locality?
[Unknown]: Sao Paulo
What is the name of your State or Province?
[Unknown]: SP
What is the two-letter country code for this unit?
[Unknown]: BR
Is CN=Loiane Groner, OU=home, O=home, L=Sao Paulo, ST=SP, C=BR correct?
[no]: y
Enter key password for
(RETURN if same as keystore password): password
Re-enter new password: password
這樣就在用戶的主目錄下創建了一個 .keystore 文件
2. 配置 Tomcat 以使用 keystore 文件
打開 server.xml 找到下面被注釋的這段
<!--
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->
干掉注釋,并將內容改為
<Connector SSLEnabled="true" acceptCount="100" clientAuth="false"
disableUploadTimeout="true" enableLookups="false" maxThreads="25"
port="8443" keystoreFile="/Users/loiane/.keystore" keystorePass="password"
protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https"
secure="true" sslProtocol="TLS" />
3. 測試
啟動 Tomcat 并訪問 https://localhost:8443. 你將看到 Tomcat 默認的首頁。
需要注意的是,如果你訪問默認的 8080 端口,還是有效的。
4. 配置應用使用 SSL
打開應用的 web.xml 文件,增加配置如下:
<security-constraint>
<web-resource-collection>
<web-resource-name>securedapp</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
將 URL 映射設為 /* ,這樣你的整個應用都要求是 HTTPS 訪問,而 transport-guarantee 標簽設置為 CONFIDENTIAL 以便使應用支持 SSL。
如果你希望關閉 SSL ,只需要將 CONFIDENTIAL 改為 NONE 即可。
如果是MAVEN的TOMCAT插件,則加入如下配置
<build>
<finalName>test-dropbox</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.0</version>
<configuration>
<httpsPort>8443</httpsPort>
<keystorePass>password</keystorePass>
<keystoreFile>C:\Users\PAUL\.keystore</keystoreFile>
</configuration>
</plugin>
</plugins>
</build>
用xshell連接vm上的ubuntu
1.
File->new
在host里面填寫你要連接的主機的ip地址 192.168.1.x
2.點Authentication出現下面的對話框
User Name 里面填的是你要連接要主機上的用戶名 隨便填寫
Password 你設定的密碼,不要忘了。
然后你可以測試下是否可以進去了,
File->open
選擇你新建的 點擊connect。
碰到的問題,我在點了connect 在xshell下面出現如下的代碼:
Xshell displays "Could not connect to 'hostname' (port 22): Connection failed." message.
說明沒有開啟SSH的22端口
在ubuntu終端下運行
sudo netstat –antup
看下面是否有一個22端口,如果沒有需要安裝SSHD服務,可以直接運行安裝服務
sudo apt-get install openssh-server
安裝完之后再查看一下是否開啟了22端口,如果開啟了,那么用xshell來連接基本上就沒什么問題了
還有一個是在xshell中的中文亂碼問題
輸入:
Locale
輸出:
LANG=zh_CN.UTF-8
LC_CTYPE=”zh_CN.UTF-8″
LC_NUMERIC=”zh_CN.UTF-8″
LC_TIME=”zh_CN.UTF-8″
LC_COLLATE=”zh_CN.UTF-8″
LC_MONETARY=”zh_CN.UTF-8″
LC_MESSAGES=”zh_CN.UTF-8″
LC_PAPER=”zh_CN.UTF-8″
LC_NAME=”zh_CN.UTF-8″
LC_ADDRESS=”zh_CN.UTF-8″
LC_TELEPHONE=”zh_CN.UTF-8″
LC_MEASUREMENT=”zh_CN.UTF-8″
LC_IDENTIFICATION=”zh_CN.UTF-8″
LC_ALL=
說明系統的中文編碼是采用utf8的,為了在xshell中正常的顯示中文,我們要把xshell編碼方式改成utf8
[文件]–>[打開]–>在打開的session中選擇連接的那個 ,點擊properties -> [Terminal ] ,在右邊的translation先選擇utf8,然后重新連接服務器即可。
如何將windwos上的文件傳輸到虛擬機上的linux 上
輸入:
rz –help
如果出現
程序“rz”尚未安裝。 您可以使用以下命令安裝:
sudo apt-get install lrzsz
說明你還沒有安裝rz 輸入:
sudo apt-get install lrzsz
安裝rz
切換到你要存放文件的目錄
File->Transfer->Send ZMODEM,出現一個對話框,選擇你要傳輸的文件就可以了。
- For disable IPv6 on Ubuntu Server, we need add these configuration lines in /etc/sysctl.conf
# IPv6 configuration
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
-
Reload configurationf or sysctl.conf
sysctl -p
-
Check IPv6 is disabled on Ubuntu Server
root@ip-10-48-234-13:/# ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 12:31:3c:03:e9:fb brd ff:ff:ff:ff:ff:ff
inet 10.48.234.13/23 brd 10.48.235.255 scope global eth0
先查看
rpm -qa | grep java
顯示如下信息:
javapackages-tools-0.9.1-1.2.amzn1.noarch
java-1.6.0-openjdk-1.6.0.0-62.1.11.11.90.55.amzn1.x86_64
tzdata-java-2013c-2.18.amzn1.noarch
卸載:
rpm -e --nodeps javapackages-tools-0.9.1-1.2.amzn1.noarch
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-62.1.11.11.90.55.amzn1.x86_64
rpm -e --nodeps tzdata-java-2013c-2.18.amzn1.noarch
還有一些其他的命令
rpm -qa | grep gcj
rpm -qa | grep jdk
如果出現找不到openjdk source的話,那么還可以這樣卸載
yum -y remove java java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
yum -y remove java java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5
<1># rpm -qa|grep jdk ← 查看jdk的信息或直接執行
或
# rpm -q jdk
或
# java -version
<2># rpm -qa | grep gcj ← 確認gcj的版本號
<3># yum -y remove java-1.4.2-gcj-compat ← 卸載gcj
安裝SUN JDK
http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html#jdk-6u45-oth-JPR
- 啟動ZOOPKEEPER
zkServer.sh start - 啟動NIMBUS
storm nimbus & - 啟動SUPERVISOR
storm supervisor & - 啟動UI
storm ui & - 部署TOPOLOGY
storm jar /opt/hadoop/loganalyst/storm-dependend/data/teststorm-1.0.jar teststorm.TopologyMain /opt/hadoop/loganalyst/storm-dependend/data/words.txt - 刪除TOPOLOGY
storm kill {toponame} - 激活TOPOLOGY
storm active {toponame} - 不激活TOPOLOGY
storm deactive {toponame} - 列出所有TOPOLOGY
storm list
對于一堆時刻在增長的數據,如果要統計,可以采取什么方法呢?
- 等數據增長到一定程度的時候,跑一個統計程序進行統計。適用于實時性要求不高的場景。
如將數據導到HDFS,再運行一個MAP REDUCE JOB。
- 如果實時性要求高的,上面的方法就不行了。因此就帶來第二種方法。
在數據每次增長一筆的時候,就進行統計JOB,結果放到DB或搜索引擎的INDEX中。
STORM就是完成這種工作的。
HADOOP與STORM比較
- 數據來源:HADOOP是HDFS上某個文件夾下的可能是成TB的數據,STORM是實時新增的某一筆數據
- 處理過程:HADOOP是分MAP階段到REDUCE階段,STORM是由用戶定義處理流程,
流程中可以包含多個步驟,每個步驟可以是數據源(SPOUT)或處理邏輯(BOLT) - 是否結束:HADOOP最后是要結束的,STORM是沒有結束狀態,到最后一步時,就停在那,直到有新
數據進入時再從頭開始 - 處理速度:HADOOP是以處理HDFS上大量數據為目的,速度慢,STORM是只要處理新增的某一筆數據即可
可以做到很快。 - 適用場景:HADOOP是在要處理一批數據時用的,不講究時效性,要處理就提交一個JOB,STORM是要處理
某一新增數據時用的,要講時效性
- 與MQ對比:HADOOP沒有對比性,STORM可以看作是有N個步驟,每個步驟處理完就向下一個MQ發送消息,
監聽這個MQ的消費者繼續處理
首先要明白Storm和Hadoop的應用領域,注意加粗、標紅的關鍵字。
Hadoop是基于Map/Reduce模型的,處理海量數據的離線分析工具。
Storm是分布式的、實時數據流分析工具,數據是源源不斷產生的,例如Twitter的Timeline。
再回到你說的速度問題,只能說Storm更適用于實時數據流,Map/Reduce模型在實時領域很難有所發揮,不能簡單粗暴的說誰快誰慢。
這里的快主要是指的時延。
storm的網絡直傳、內存計算,其時延必然比hadoop的通過hdfs傳輸低得多;當計算模型比較適合流式時,storm的流式處理,省去了批處理的收集數據的時間;因為storm是服務型的作業,也省去了作業調度的時延。所以從時延上來看,storm要快于hadoop。
說一個典型的場景,幾千個日志生產方產生日志文件,需要進行一些ETL操作存入一個數據庫。
假設利用hadoop,則需要先存入hdfs,按每一分鐘切一個文件的粒度來算(這個粒度已經極端的細了,再小的話hdfs上會一堆小文件),hadoop開始計算時,1分鐘已經過去了,然后再開始調度任務又花了一分鐘,然后作業運行起來,假設機器特別多,幾鈔鐘就算完了,然后寫數據庫假設也花了很少的時間,這樣,從數據產生到最后可以使用已經過去了至少兩分多鐘。
而流式計算則是數據產生時,則有一個程序去一直監控日志的產生,產生一行就通過一個傳輸系統發給流式計算系統,然后流式計算系統直接處理,處理完之后直接寫入數據庫,每條數據從產生到寫入數據庫,在資源充足時可以在毫秒級別完成。
當然,跑一個大文件的wordcount,本來就是一個批處理計算的模型,你非要把它放到storm上進行流式的處理,然后又非要讓等所有已有數據處理完才讓storm輸出結果,這時候,你再把它和hadoop比較快慢,這時,其實比較的不是時延,而是比較的吞吐了。
Hadoop M/R基于HDFS,需要切分輸入數據、產生中間數據文件、排序、數據壓縮、多份復制等,效率較低。
Storm 基于ZeroMQ這個高性能的消息通訊庫,不持久化數據。