2016-03-25 19 views
5

enter image description hereSpark Sợi Kiến trúc

Tôi đã có một câu hỏi liên quan hình ảnh này trong một hướng dẫn tôi đi theo. Vì vậy, dựa trên hình ảnh này trong kiến ​​trúc dựa trên sợi, việc thực hiện ứng dụng tia lửa trông giống như thế này:

Trước tiên, bạn có trình điều khiển đang chạy trên nút máy khách hoặc một số nút dữ liệu. Trong trình điều khiển này (tương tự như một trình điều khiển trong java?) Bao gồm mã của bạn (được viết bằng java, python, scala, vv) mà bạn gửi đến Spark Context. Sau đó, bối cảnh tia lửa đó thể hiện sự kết nối với HDFS và gửi yêu cầu của bạn đến trình quản lý tài nguyên trong hệ sinh thái Hadoop. Sau đó trình quản lý tài nguyên giao tiếp với nút Tên để tìm ra các nút dữ liệu nào trong cụm chứa thông tin mà nút máy khách đã yêu cầu. Các bối cảnh tia lửa cũng sẽ đặt một thực thi trên nút công nhân sẽ chạy các nhiệm vụ. Sau đó, trình quản lý nút sẽ khởi động trình thực thi sẽ chạy các tác vụ được đưa ra bởi Spark Context và sẽ trả về dữ liệu mà máy khách yêu cầu từ HDFS đến trình điều khiển.

Giải thích ở trên có đúng không?

Ngoài ra trình điều khiển sẽ gửi ba trình thực thi cho mỗi nút dữ liệu để truy xuất dữ liệu từ HDFS, vì dữ liệu trong HDFS được sao chép 3 lần trên các nút dữ liệu khác nhau?

Trả lời

3

Cách diễn giải của bạn gần với thực tế nhưng có vẻ như bạn hơi bối rối về một số điểm.

Hãy xem liệu tôi có thể làm điều này rõ ràng hơn cho bạn hay không.

Giả sử bạn có ví dụ về số từ trong Scala.

object WordCount { 
    def main(args: Array[String]) { 
     val inputFile = args(0) 
     val outputFile = args(1) 
     val conf = new SparkConf().setAppName("wordCount") 

     val sc = new SparkContext(conf) 

     val input = sc.textFile(inputFile) 

     val words = input.flatMap(line => line.split(" ")) 

     val counts = words.map(word => (word, 1)).reduceByKey{case (x, y) => x + y} 

     counts.saveAsTextFile(outputFile) 
    } 
} 

Trong mọi công việc spark bạn có một bước khởi động mà bạn tạo ra một đối tượng SparkContext cung cấp một số cấu hình như appname và các bậc thầy, sau đó bạn đọc một Inputfile, bạn xử lý nó và giúp bạn tiết kiệm kết quả xử lý của bạn trên đĩa. Tất cả mã này đang chạy trong Trình điều khiển ngoại trừ các hàm ẩn danh thực hiện việc xử lý thực tế (các hàm được truyền tới .flatMap, .map và reduceByKey) và các hàm I/O textFile và saveAsTextFile đang chạy từ xa trên cụm.

Ở đây DRIVER là tên được gán cho phần đó của chương trình đang chạy cục bộ trên cùng một nút nơi bạn gửi mã của mình với spark-submit (trong ảnh của bạn được gọi là Nút máy khách). Bạn có thể gửi mã của bạn từ bất kỳ máy nào (hoặc ClientNode, WorderNode hoặc thậm chí MasterNode) miễn là bạn có trình kích hoạt tia lửa và truy cập mạng vào cụm YARN của bạn. Để đơn giản, tôi sẽ giả định rằng nút Client là laptop của bạn và cluster Yarn được tạo từ các máy từ xa.

Để đơn giản, tôi sẽ rời khỏi ảnh này Zookeeper vì nó được sử dụng để cung cấp tính sẵn sàng cao cho HDFS và nó không liên quan đến việc chạy ứng dụng tia lửa. Tôi phải đề cập rằng Trình quản lý tài nguyên sợi và HDFS Namenode là các vai trò trong Sợi và HDFS (thực ra chúng là các tiến trình đang chạy bên trong một JVM) và chúng có thể sống trên cùng một nút chính hoặc trên các máy riêng biệt. Ngay cả các nhà quản lý Nút sợi và Nút dữ liệu chỉ là vai trò nhưng chúng thường sống trên cùng một máy để cung cấp địa phương dữ liệu (xử lý gần nơi dữ liệu được lưu trữ).

Khi bạn gửi đơn đăng ký của mình, trước tiên bạn liên hệ với Người quản lý tài nguyên cùng với NameNode, tìm cách tìm các nút Công nhân có sẵn để chạy tác vụ spark của bạn. Để tận dụng lợi thế của nguyên tắc địa phương dữ liệu, Trình quản lý tài nguyên sẽ thích các nút công nhân lưu trữ trên cùng một khối HDFS của máy (bất kỳ bản sao nào trong 3 bản sao) cho tệp mà bạn phải xử lý. Nếu không có nút công nhân nào với các khối đó, nó sẽ sử dụng bất kỳ nút công nhân nào khác.Trong trường hợp này vì dữ liệu sẽ không có sẵn cục bộ, các khối HDFS phải được di chuyển qua mạng từ bất kỳ nút Dữ liệu nào đến trình quản lý nút đang chạy tác vụ spark. Quá trình này được thực hiện cho mỗi khối tạo tệp của bạn, vì vậy một số khối có thể được tìm thấy cục bộ, một số có thể di chuyển.

Khi trình quản lý tài nguyên tìm thấy nút công nhân, nó sẽ liên lạc với NodeManager trên nút đó và yêu cầu nó tạo một Vùng chứa sợi (JVM) để chạy trình kích hoạt tia lửa. Trong các chế độ cluster khác (Mesos hoặc Standalone), bạn sẽ không có một thùng chứa Yarn nhưng khái niệm về trình thực thi tia lửa là như nhau. Trình thực thi tia lửa đang chạy dưới dạng JVM và có thể chạy nhiều tác vụ.

Trình điều khiển đang chạy trên nút máy khách và các tác vụ đang chạy trên các trình thực thi tia lửa giữ liên lạc để chạy công việc của bạn. Nếu trình điều khiển đang chạy trên máy tính xách tay của bạn và sự cố máy tính xách tay của bạn, bạn sẽ mất kết nối với các nhiệm vụ và công việc của bạn sẽ thất bại. Đó là lý do tại sao khi tia lửa chạy trong cụm Sợi bạn có thể chỉ định nếu bạn muốn chạy trình điều khiển trên máy tính xách tay của mình "--deploy-mode = client" hoặc trên cụm sợi như một thùng chứa sợi khác "--deploy-mode = cluster ". Để biết thêm chi tiết, hãy xem spark-submit

+0

Cảm ơn bạn rất nhiều vì lời giải thích chi tiết này !! Liên quan đến cách trình quản lý tài nguyên và nút tên hoạt động cùng nhau để tìm một nút công nhân. Vì vậy, về cơ bản ba bản sao của tệp của bạn được lưu trữ trên ba nút dữ liệu khác nhau trong HDFS. Trình quản lý tài nguyên sẽ chọn nút công nhân có khối HDFS đầu tiên dựa trên vị trí dữ liệu và liên lạc với NodeManager trên nút nhân viên đó để tạo một Vùng chứa sợi (JVM) ở nơi chạy trình điều khiển tia lửa. Nếu các khối khác không có sẵn trong "phạm vi" này, thì nó sẽ chuyển đến các nút công nhân khác và chuyển các khối khác qua – LP496

+0

mạng tới nút dữ liệu gần nhất mà trình quản lý tài nguyên tìm thấy ban đầu (với trình kích hoạt tia lửa chạy) ? – LP496

+1

Có chính xác. Bạn đang ở bên phải – PinoSan