1.1 今天是蔚來實習的第五天,整理文件和文件夾權限的修改(比如在複製Linux上文件時候,發現文件不能夠被複制,那麼我們可以使用ls -l 來查看某個文件夾下所有文件的權限)
新建文件: cat+ 文件名
刪除文件: rm+ 文件名(可以使用
-r 就是向下遞歸,不管有多少級目錄,一併刪除
-f 就是直接強行刪除,不作任何提示的意思
就是 rm -rf)
合併文件: cat a.sh b.sh > c.sh (注意如果目標文件是這兩個裏面的時候,會產生覆蓋)
比如:
這兒的命令一共包含了10位,第一位是是否爲文件夾,2-4位代表所有者user的權限說明,5-7位代表組羣group的權限說明,8-10位代表其他人other的權限說明。
r = 4,w = 2 , x= 1
從而 sudo chmod -r 777 /var
就是給"/var"這個目錄賦予所有人可讀可寫可執行的權限,4+2+1 = 7
-rw-----600 表示只有所有者纔有讀寫的權利
-rw-r–r-- (644) 只有所有者纔有讀和寫的權限,組羣和其他人只有讀的權限
-rwx------ (700) 只有所有者纔有讀,寫,執行的權限
-rwxr-xr-x (755) 只有所有者纔有讀,寫,執行的權限,組羣和其他人只有讀和執行的權限
-rwx–x--x (711) 只有所有者纔有讀,寫,執行的權限,組羣和其他人只有執行的權限
-rw-rw-rw- (666) 每個人都有讀寫的權限
=========================================================================================================
2.1 從Hadoop上讀文件
批處理:
final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
DataSet<String> stringDataSet=env.readTextFile("hdfs:///user/zhenghui.liu/lzhTest/Test01");
stringDataSet.print();
流處理:
這兒的writeAsText()方法已經被棄用了現在,另外就是最後的setParallelism用於設置寫入的文件數,如果不進行設置,默認是自己電腦的核心數,本機是8,另外就是單文件數量大於1時,會自動建立一個文件夾,設置序號1...n進行保存
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStreamSource<String> stringDataSet = env.readTextFile("hdfs:///user/zhenghui.liu/lzhTest/Test01");
stringDataSet.writeAsText("hdfs:///user/zhenghui.liu/lzhTest/Test02",
org.apache.flink.core.fs.FileSystem.WriteMode.valueOf("OVERWRITE")).setParallelism(1);
進行單詞統計:
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 通過連接 socket 獲取輸入數據,這裏連接到本地9000端口,如果9000端口已被佔用,請換一個端口
DataStream<String> text = env.readTextFile("hdfs:///user/zhenghui.liu/lzhTest/Test01");
// 解析數據,按 word 分組,開窗,聚合
DataStream<Tuple2<String, Integer>> windowCounts = text
.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
@Override
public void flatMap(String value, Collector<Tuple2<String, Integer>> out) {
for (String word : value.split("\\s")) { // 將空格,回車,換行等空白符去了
out.collect(Tuple2.of(word, 1)); //轉換成一個元組 (word,key),初始爲1
}
}
})
.keyBy(0) // 以第1個元素作爲Key進行分組
// .timeWindow(Time.seconds(5)) // 窗口的大小爲5S
.sum(1); // 這兒的1代表將這個位置上的數字進行聚合
// 將結果打印到控制檯,注意這裏使用的是單線程打印,而非多線程
// windowCounts.print().setParallelism(1);//單線程
windowCounts.writeAsText("hdfs:///user/zhenghui.liu/lzhTest/Test02", org.apache.flink.core.fs.FileSystem.WriteMode.valueOf("OVERWRITE")).setParallelism(1);
windowCounts.print();
env.execute("Socket Window WordCount");